我有这些图像可以相互比较。但是,我认为我可以裁剪出太多的黑色以使比较更有效。
我想做的是作物火星。比较时,矩形或圆形可能会产生更好的结果。我担心如果裁剪会导致图像大小不同,比较不会像预期的那样好?如果可能的话,想法如何做和示例代码?提前致谢
更新:尝试使用 cvHoughCircles() 它不会检测到地球:/
我有这些图像可以相互比较。但是,我认为我可以裁剪出太多的黑色以使比较更有效。
我想做的是作物火星。比较时,矩形或圆形可能会产生更好的结果。我担心如果裁剪会导致图像大小不同,比较不会像预期的那样好?如果可能的话,想法如何做和示例代码?提前致谢
更新:尝试使用 cvHoughCircles() 它不会检测到地球:/
您可以使用将这些图像转换为灰度图像cvCvtColor(img,imgGrayScale,CV_BGR2GRAY)
然后使用cvThreshold(imgGrayScale,imgThresh,x,255,CV_THRESH_BINARY)
. 在这里,你必须为 x 找到一个好的值(我认为 x=50 是可以的)。
CvMoments *moments = (CvMoments*)malloc(sizeof(CvMoments));
cvMoments(imgThresh, moments, 1);
double moment10 = cvGetSpatialMoment(moments, 1, 0);
double moment01 = cvGetSpatialMoment(moments, 0, 1);
double area = cvGetCentralMoment(moments, 0, 0);
int x = moment10/area;
int y = moment01/area;
现在您知道了 blob 的 (xy) 坐标。然后您可以使用cvSetImageROI(imgThresh, cvRect(x-10, y-10, x+10, y+10))
. 这里我假设这个 blob 的半径小于 10 像素。
所有裁剪的图像都具有相同的大小,并且白色斑点(行星)正好位于图像的中间。
然后,您可以使用归一化互相关比较图像。
There's no fundamental reason why a histogram would fail here. I would convert the image to greyscale before doing a histogram, just to make the numbers more manageable. A color image has a 3D histogram; the Red, Green, Blue and Greyscale histograms are all 1D projections of that 3D histogram.