Quería probar mi reconocimiento de texto, así que he usado opencv para trazar los bordes y C++ para encontrar pendientes, curvas, etc., el algoritmo Edge funciona bien en conjuntos grandes y despejados de caracteres, pero cuando se trata de texto pequeño impreso o texto con mucho ruido de fondo, como incrustado en captcha, tiene problemas y parece incompleto, supongo que no había establecido correctamente los valores de umbral y probado diferentes valores sin éxito.Ajustando el umbral en el algoritmo Canny Edge
Aquí está mi código:
#include "cv.h"
#include "highgui.h"
using namespace cv;
const int low_threshold = 50;
const int high_threshold = 150;
int main()
{
IplImage* newImg;
IplImage* grayImg;
IplImage* cannyImg;
newImg = cvLoadImage("ocv.bmp",1);
grayImg = cvCreateImage(cvSize(newImg->width, newImg->height), IPL_DEPTH_8U, 1);
cvCvtColor(newImg, grayImg, CV_BGR2GRAY);
cannyImg = cvCreateImage(cvGetSize(newImg), IPL_DEPTH_8U, 1);
cvCanny(grayImg, cannyImg, low_threshold, high_threshold, 3);
cvNamedWindow ("Source", 1);
cvNamedWindow ("Destination",1);
cvShowImage ("Source", newImg);
cvShowImage ("Destination", cannyImg);
cvWaitKey(0);
cvDestroyWindow ("Source");
cvDestroyWindow ("Destination");
cvReleaseImage (&newImg);
cvReleaseImage (&grayImg);
cvReleaseImage (&cannyImg);
return 0;
}
He mirado a través de la red y he visto algunas condiciones de umbral complicadas como en el código de este sitio:
% Set direction to either 0, 45, -45 or 90 depending on angle.
[x,y]=size(f1);
for i=1:x-1,
for j=1:y-1,
if ((gradAngle(i,j)>67.5 && gradAngle(i,j)<=90) || (gradAngle(i,j)>=-90 && gradAngle(i,j)<=-67.5))
gradDirection(i,j)=0;
elseif ((gradAngle(i,j)>22.5 && gradAngle(i,j)<=67.5))
gradDirection(i,j)=45;
elseif ((gradAngle(i,j)>-22.5 && gradAngle(i,j)<=22.5))
gradDirection(i,j)=90;
elseif ((gradAngle(i,j)>-67.5 && gradAngle(i,j)<=-22.5))
gradDirection(i,j)=-45;
end
end
end
Si esto es t La solución puede alguien proporcionarme el equivalente C++ de este algoritmo, si no es así, ¿qué más puedo hacer?
No he usado openCV, pero también podría jugar primero con el parámetro sigma del detector de bordes astutos. – WebMonster
Tendría que calcular estos valores a partir del histograma de la imagen de magnitud de gradiente, ¿verdad? –