4

我有这些图像可以相互比较。但是,我认为我可以裁剪出太多的黑色以使比较更有效。

火星 1 火星 2 火星 3

我想做的是作物火星。比较时,矩形或圆形可能会产生更好的结果。我担心如果裁剪会导致图像大小不同,比较不会像预期的那样好?如果可能的话,想法如何做和示例代码?提前致谢

更新:尝试使用 cvHoughCircles() 它不会检测到地球:/

4

3 回答 3

6

尝试使用颜色检测。您需要找到除黑色以外的所有颜色。这里这里是对这种方法的很好的解释。

于 2013-01-28T08:00:47.970 回答
4

您可以使用将这些图像转换为灰度图像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 像素。

所有裁剪的图像都具有相同的大小,并且白色斑点(行星)正好位于图像的中间。

然后,您可以使用归一化互相关比较图像。

于 2013-01-29T12:08:10.723 回答
1

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.

于 2013-01-28T10:58:12.867 回答