在图像中定位一组像素

时间:2014-04-11 10:52:26

标签: matlab image-processing position threshold

我正在做一些低级图像处理项目,我需要找到一个对象的位置。在这种情况下,它是一颗彗星。我玩了一些阈值,并得到了一个相当多的二进制图像,但我接下来需要的是在大的白色像素组的中间找到一个固定点,以便可以跟踪它或其他东西。有关如何做到这一点的任何想法? 这是我得到的屏幕截图。

enter image description here

Link to the photo

有没有办法过滤掉整个画面上的所有白点?某种功能给所有小组的值“0”? 提前谢谢!

4 个答案:

答案 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

enter image description here

注意:还有另一个问题 - Select largest object in an image与此案有关。

答案 1 :(得分:2)

MATLAB regionprops是你的朋友,你的形象足以满足你的目标。

regionprops正是你所需要的(你得到了质心的X,Y)。由于它也提供了区域,因此您可以过滤结果并仅保留图像中的最大对象。

答案 2 :(得分:1)

你的问题似乎已经被regionprops解决了,正如其他人已经提出的那样,但是如果你感兴趣的话,一般来说,消除图像中的小白色文物:

您可以对二进制图像应用erosion的一个或多个步骤,消除小白点(但也会减小彗星的大小!)。

答案 3 :(得分:0)

您可以使用中值滤镜或形态开口滤镜来移除小的白色区域。您必须尝试并为过滤器内核选择正确的大小。假设您在过滤后拥有更清晰的图像,则可以执行标注,然后执行regionprops以获取blob的质心。