在MatLab中,我有一个二进制图像,我正试图填补一个洞。问题是该区域大部分(但并非完全)关闭。是否有任何现有的视觉处理功能可以做到这一点?我是否必须编写自己的算法?
原创/期望
另一个单独的问题是我在二进制图像中检测细尾状结构时遇到问题。我需要移除这些类型的结构,而无需移除它附着的较大的主体。是否有任何现有的视觉处理功能可以做到这一点?我是否必须编写自己的算法?
原创/期望
答案 0 :(得分:5)
在第一个示例中,您可以使用imclose
执行扩张,然后使用侵蚀来关闭这些边缘。然后,您可以跟进imfill
以完全填写。
img = imread('http://i.stack.imgur.com/Pt3nl.png');
img = img(:,:,1) > 0;
% You can play with the structured element (2nd input) size
closed = imclose(img, strel('disk', 13));
filled = imfill(closed, 'holes');
同样,使用第二组图像,您可以使用imopen
(侵蚀,然后扩张)来移除尾部。
img = imread('http://i.stack.imgur.com/yj32n.png');
img = img(:,:,1);
% You can play with the structured element (2nd input) size
% Increase this number if you want to remove the legs and more of the tail
opened = imopen(img, strel('disk', 7));
<强>更新强>
如果你想要关闭&#34;中央开口的质心。如上图所示,您可以通过从closed
中减去filled
来获得仅此开头的面具。
% Find pixels that were in the filled region but not the closed region
hole = filled - closed;
% Then compute the centroid of this
[r,c] = find(hole);
centroid = [mean(r), mean(c)];