【问题标题】:Unite endpoints of edge with line将边缘的端点与线连接起来
【发布时间】:2015-08-04 17:53:33
【问题描述】:

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

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

有什么想法吗?

编辑

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

【问题讨论】:

  • bwconvhull 能解决您的问题吗?
  • 不,当我使用imgc=bwconvhull(img)imgc=bwconvhull(img,'objects')imgc=bwconvhull(img,'union') 时,边缘消失了

标签: matlab image-recognition edge-detection centroid


【解决方案1】:

使用形态学运算

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

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

最终结果

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

【讨论】:

    猜你喜欢
    • 2020-08-18
    • 1970-01-01
    • 2021-12-05
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多