我正在做一些低级图像处理项目,我需要找到一个对象的位置。在这种情况下,它是一颗彗星。我玩了一些阈值,并得到了一个相当多的二进制图像,但我接下来需要的是在大的白色像素组的中间找到一个固定点,以便可以跟踪它或其他东西。有关如何做到这一点的任何想法? 这是我得到的屏幕截图。
有没有办法过滤掉整个画面上的所有白点?某种功能给所有小组的值“0”? 提前谢谢!
答案 0 :(得分:3)
也许你正在寻找这个 -
<强>代码强>
%%// Read in image and convert to binary
img = imread(IMAGE_FILEPATH);
BW = im2bw(img);
%%// Get only the comet blob, which is the biggest blob
[L, num] = bwlabel(BW);
counts = sum(bsxfun(@eq,L(:),1:num));
[~,ind] = max(counts);
BW = (L==ind);
%%// Find the centroid of the comet blob
stats = regionprops(BW, 'Centroid');
center_point = stats.Centroid
<强>输出强>
center_point =
56.7471 131.9373
注意:还有另一个问题 - Select largest object in an image与此案有关。
答案 1 :(得分:2)
MATLAB regionprops是你的朋友,你的形象足以满足你的目标。
regionprops正是你所需要的(你得到了质心的X,Y)。由于它也提供了区域,因此您可以过滤结果并仅保留图像中的最大对象。
答案 2 :(得分:1)
你的问题似乎已经被regionprops
解决了,正如其他人已经提出的那样,但是如果你感兴趣的话,一般来说,消除图像中的小白色文物:
您可以对二进制图像应用erosion的一个或多个步骤,消除小白点(但也会减小彗星的大小!)。
答案 3 :(得分:0)
您可以使用中值滤镜或形态开口滤镜来移除小的白色区域。您必须尝试并为过滤器内核选择正确的大小。假设您在过滤后拥有更清晰的图像,则可以执行标注,然后执行regionprops以获取blob的质心。