No olvides que en las ciencias informáticas un problema casi siempere suele tener diversas soluciones, pero nosotros aquí mostramos lo más óptimo y eficiente.
Solución:
Aquí hay una forma:
data = [email protected]@"http://i.stack.imgur.com/NQr6I.png";
points=ComponentMeasurements[ MorphologicalComponents[Sharpen[Dilation[[email protected],1.5],1]] ,"Centroid"][[All,2]];
box=ComponentMeasurements[ MorphologicalComponents[Sharpen[Dilation[[email protected],1.5],1]] ,"BoundingBox"][[All,2]];
posX,posY=Mean/@Split[#,If[Abs[#1-#2]<5,True,False]&]&/@[email protected][[All,1]],[email protected][[All,2]]
Podemos ver que la posición de la cuadrícula funcionó en esta gráfica:
ListPlot[points,PlotRange->All,GridLines->posX,posY,PlotStyle->Red]
Ahora hagamos la partición de la imagen:
imagePartition = ParallelMap[ImageTrim[[email protected]
, #] &, box];
Aquí hay una muestra:
imagePartition[[;; 15]]
Ahora, la parte que debe mejorarse, aquí hay un intento de reconocer los números.
getNumber[img_]:=Module[r,comp,
comp=ComponentMeasurements[img,"PerimeterCount","Holes"][[All,2]];
r=Which[
[email protected]#==2,-1
,#[[1,2]]==1,0
,#[[1,1]]<15,1
,True,2
]&[comp];
(*r,comp,img*)
r
]
Dos elementos encuentran -1, un agujero encuentra 0, ningún agujero con perímetro <15 encuentra 1 y el resto es 2.
Aplicándolo partición de datos como:
numberData=Partition[ParallelMap[getNumber,imagePartition],[email protected]]//MatrixForm
Obtenemos:
Grid[numberData,Spacings->0,Alignment-> NumberPoint,Dividers->LightGray,BaseStyle->FontSize-> 11]
No es perfecto, pero puede ser un punto de partida. Es solo mejorar getNumber.
Actualizar
Con algo de calibración en getNumber
y usando Binarize
en lugar de Sharpen
ahora todos los casos están bien.
TextRecognize
funciona bien después de algunos ajustes y correcciones de errores:
x = Import["http://i.stack.imgur.com/NQr6I.png"];
res = TextRecognize[Binarize[ImageResize[x, Scaled[5]], 0.7],"SegmentationMode" -> 6];
m = ToExpression /@ StringSplit[#] & /@
StringSplit[
StringReplace[
res, "D" ],
"n"];
m // MatrixForm
He usado la opción no documentada "SegmentationMode" -> 6
.
Reseñas y valoraciones
Tienes la opción de añadir valor a nuestro contenido informacional aportando tu veteranía en las ilustraciones.