0

我正在尝试使用 k-NN 分类器制作对象识别程序。我有一堆图像用于分类器的训练部分,还有一堆图像要识别。这些图像是灰度的,每张图像都有一个对象(只有它的边缘)。我需要计算它们的质心,所以我使用 img=im2bw(img) 然后regionprops(img,'centroid')

问题是其中一些边缘没有关闭,因此 regionprops 不起作用。我尝试侵蚀图像(边缘是黑色,白色背景)但这些边缘的端线彼此相距太远。我尝试使用bwmorph函数来这样做,但仍然无法使其工作。

有任何想法吗?

编辑

我正在添加一些图片以防有人想尝试: 树_1

square_1树_2

4

1 回答 1

0

使用形态学运算

使用关闭操作来填充您的结构。

1.第一步准备您的图像数据

im = imread('your image.jpg');
% Get first channel as gray scale information
im = im(:,:,1);
% Threshold it for simplicyty, you may work on grayscale too.
im1 = logical(im > 128);

二值化后的图像

2.使用简单的块状结构元素

结构元素定义为:

strel=ones(3,3);

您可以使用圆盘形元素或任何能给您带来最佳效果的东西。

3. 应用结构元素几次

使用腐蚀运算符将 strel 应用到您的原始图像几次以关闭您的图形:

for i=1:20
  im1 = imerode(im1,strel);
end

侵蚀后的图像

4.放大图像以恢复原始形状

下一步是扩大图像以恢复原始外形:

for i=1:20
  im1 = imdilate(im1,strel);
end

最后结果

最终结果应该适合获得足够精确的中心或重心。

膨胀后的图像

于 2017-12-13T08:54:04.297 回答