Matlab - 将边缘的端点与线结合起来

时间:2015-05-22 16:04:05

标签: matlab image-recognition edge centroid

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

问题是其中一些边缘没有关闭,所以regionprops不起作用。我试图侵蚀图像(边缘是黑色,白色背景),但这些边缘的端线彼此分开。我尝试使用bwmorph函数来执行此操作,但仍无法使其正常工作。

有什么想法吗?

修改

如果有人想尝试,我会添加一些图片: tree_1

square_1 tree_2

1 个答案:

答案 0 :(得分: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);

Image after binarisation

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

结构元素由以下内容定义:

strel=ones(3,3);

您可以使用磁盘形状的元素或任何可以给您带来最佳效果的元素。

3。多次应用结构元素

使用侵蚀操作符将strel应用于原始图像几次以关闭图形:

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

Image after erosion

4。扩大图像以恢复原始形状

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

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

最终结果

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

Image after dilation