我尝试使用k-NN分类器制作对象识别程序。我为分类器的训练部分和一堆图像识别了一堆图像。那些图像是灰度的,每个图像有一个对象(只有它的边缘)。我需要计算它们的质心,所以我用它
img=im2bw(img)
然后是regionprops(img,'centroid')
。
问题是其中一些边缘没有关闭,所以regionprops不起作用。我试图侵蚀图像(边缘是黑色,白色背景),但这些边缘的端线彼此分开。我尝试使用bwmorph
函数来执行此操作,但仍无法使其正常工作。
有什么想法吗?
修改
如果有人想尝试,我会添加一些图片:
答案 0 :(得分:0)
使用关闭操作来填充结构。
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);
结构元素由以下内容定义:
strel=ones(3,3);
您可以使用磁盘形状的元素或任何可以给您带来最佳效果的元素。
使用侵蚀操作符将strel应用于原始图像几次以关闭图形:
for i=1:20
im1 = imerode(im1,strel);
end
下一步是扩大图像以恢复原来的外形:
for i=1:20
im1 = imdilate(im1,strel);
end
最终结果应该适合于获得足够精确的中心或重力。