Matlab 将边的端点与直线合并
我正试图用k-NN分类器制作一个物体识别程序。我有一堆图像用于分类器的训练部分,还有一堆图像要识别。这些图像是灰度的,每个图像都有一个对象(只有其边缘)。我需要计算它们的重心,所以我使用Matlab 将边的端点与直线合并,matlab,image-recognition,edge-detection,centroid,Matlab,Image Recognition,Edge Detection,Centroid,我正试图用k-NN分类器制作一个物体识别程序。我有一堆图像用于分类器的训练部分,还有一堆图像要识别。这些图像是灰度的,每个图像都有一个对象(只有其边缘)。我需要计算它们的重心,所以我使用 img=im2bw(img) 然后是regionprops(img,'centroid') 问题是其中一些边没有闭合,因此regionprops无法工作。我试着腐蚀图像(边缘是黑色,白色背景),但这些边缘的端点彼此之间距离太远。我试着使用bwmorph函数来实现这一点,但仍然无法实现 有什么想法吗 编辑 我正在
img=im2bw(img)
然后是regionprops(img,'centroid')
问题是其中一些边没有闭合,因此regionprops无法工作。我试着腐蚀图像(边缘是黑色,白色背景),但这些边缘的端点彼此之间距离太远。我试着使用bwmorph
函数来实现这一点,但仍然无法实现
有什么想法吗
编辑
我正在添加一些图像,以防有人想尝试:
使用形态学运算
使用关闭操作填充结构
1.作为第一步,准备您的图像数据
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
最终结果
最终结果应适用于获得足够精确的中心或重心
是否解决了您的问题?不,当我使用
imgc=bwconvhull(img)
或imgc=bwconvhull(img,'objects')
或imgc=bwconvhull(img,'union')时,边缘消失了。
for i=1:20
im1 = imdilate(im1,strel);
end