En ajustant le seuil de Savant bord de l'algorithme
Je voulais m'essayer à la reconnaissance de texte, j'ai donc utilisé opencv à tracer les bords et c++ pour trouver les pentes, courbes, etc, le bord de l'algorithme fonctionne bien sur les gros et épuré des ensembles de caractères, mais quand il s'agit à l'encontre de petit imprimé du texte ou du texte avec beaucoup de bruit de fond comme incorporé dans captcha c'luttes et semble incomplète, je pense que je n'avais pas de définir les valeurs de seuil correctement et essayé différentes valeurs, sans succès.
Voici mon code :
#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;
}
J'ai regardé sur le net et avons vu un peu compliqué seuillage conditions de travail dans ce code à partir de ce site :
% 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 c'est la solution quelqu'un peut-il me fournir le c++ équivalent de cet algorithme, si ce n'est pas ce que je peux faire ?
OriginalL'auteur Gambit King | 2012-07-07
Vous devez vous connecter pour publier un commentaire.
Savant détecteur de bord est un multi-étape du détecteur à l'aide de seuillage par hystérésis (il utilise deux seuils au lieu d'un), et le bord de suivi (votre dernier extrait est la partie de cette étape). Je suggère la lecture de la wikipédia entrée en premier. Une solution possible pourrait être de choisir le seuil élevé, de sorte que par exemple, 70% des pixels de l'image serait classé comme un bord (initialement - vous pouvez le faire rapidement en utilisant des histogrammes), de choisir le seuil bas comme, par exemple, 40% de la valeur de seuil haut. Il pourrait être une bonne idée d'essayer d'effectuer la détection de contours sur l'image bloc plutôt que de l'ensemble de l'image, de sorte que votre algorithme pourrait calculer des seuils différents pour les différentes zones.
Noter que les CAPTCHA-s sont conçus pour être dur pour le segment, et l'ajout de bruit, qui a battu la détection de contours est une technique pour arriver à cela (vous pourriez avoir besoin pour lisser l'image de la première).
Vous devez calculer ces valeurs à partir de l'histogramme de l'ampleur du gradient de l'image, à droite?
OriginalL'auteur WebMonster