Comment détecter le Soleil à partir de l'espace de ciel dans OpenCv?

J'ai besoin de détecter le Soleil à partir de l'espace du ciel.

Ce sont des exemples des images de l'entrée:

Comment détecter le Soleil à partir de l'espace de ciel dans OpenCv?
Comment détecter le Soleil à partir de l'espace de ciel dans OpenCv?

J'ai obtenu de tels résultats après filtrage Morphologique ( open opération deux fois )

Comment détecter le Soleil à partir de l'espace de ciel dans OpenCv?
Comment détecter le Soleil à partir de l'espace de ciel dans OpenCv?

Voici le code de l'algorithme de ce traitement:

//Color to Gray
cvCvtColor(image, gray, CV_RGB2GRAY);

//color threshold
cvThreshold(gray,gray,150,255,CV_THRESH_BINARY);

//Morphologic open for 2 times
cvMorphologyEx( gray, dst, NULL, CV_SHAPE_RECT, CV_MOP_OPEN, 2);

N'est-il pas trop lourd traitement pour une telle tâche simple? Et comment trouver le centre du Soleil? Si je trouve des points blancs, que je vais trouver des points blancs de la grande Terre ( en haut à gauche sur la première image par exemple )

Merci de me conseiller s'il vous plaît mes autres mesures pour détecter le Soleil.

Mise à JOUR 1:

Essayer algorithme de prise en centroid par la formule : {x,y} = {M10/M00, M01/M00}

CvMoments moments;
cvMoments(dst, &moments, 1);
double m00, m10, m01;

m00 = cvGetSpatialMoment(&moments, 0,0);
m10 = cvGetSpatialMoment(&moments, 1,0);
m01 = cvGetSpatialMoment(&moments, 0,1);

//calculating centroid
float centroid_x = m10/m00;
float centroid_y = m01/m00;

    cvCircle( image, 
              cvPoint(cvRound(centroid_x), cvRound(centroid_y)), 
              50, CV_RGB(125,125,0), 4, 8,0);

Et où la Terre est dans la photo, j'ai obtenu un résultat:
Comment détecter le Soleil à partir de l'espace de ciel dans OpenCv?

Donc, le centre de gravité est sur la Terre. 🙁

Mise à JOUR 2:

Essayer cvHoughCircles:

CvMemStorage* storage = cvCreateMemStorage(0);
CvSeq* circles = cvHoughCircles(dst, storage, CV_HOUGH_GRADIENT, 12, 
                                dst->width/2, 255, 100, 0, 35);

if ( circles->total > 0 ) {
    //getting first found circle
    float* circle = (float*)cvGetSeqElem( circles, 0 ); 

    //Drawing:
    //green center dot
    cvCircle( image, cvPoint(cvRound(circle[0]),cvRound(circle[1])), 
          3, CV_RGB(0,255,0), -1, 8, 0 ); 
    //wrapping red circle
    cvCircle( image, cvPoint(cvRound(circle[0]),cvRound(circle[1])), 
        cvRound(circle[2]), CV_RGB(255,0,0), 3, 8, 0 ); 
}

Comment détecter le Soleil à partir de l'espace de ciel dans OpenCv?
Comment détecter le Soleil à partir de l'espace de ciel dans OpenCv?

Premier exemple: le bingo, mais le deuxième n' ;(

J'ai essayé différentes configuration de cvHoughCircles() - n'arrivais pas à trouver de configuration pour s'adapter à tous mon exemple de photo.

UPDATE3:

matchTemplate approche a fonctionné pour moi ( réponse de mevatron ). Il a travaillé avec un grand nombre de tests.

OriginalL'auteur Larry Cinnabar | 2011-11-21