连接边缘在图像Matlab

6视图(30天)
Chapz82
Chapz82 2023年3月21日
编辑: 为副总经理 2023年3月23日
我有下面的图像
我想找到我使用的边缘 “边缘” 函数作为(上图)
BW =边缘(,“索贝尔”);
我得到以下的形象
但是当我放大我发现并不是所有的边缘连接。我能做些什么来连接所有的东西吗?
我已经尝试使用
b = bwmorph (BW,“桥”)
但是它多恩不能连接。
谢谢你!
PS: T 他问题描述部发现孤立的成员。孤立的成员(在这个例子中)的边缘长度等于403 + - 18。这个具体案例的解是1成员,但我得到了0。还有其他的例子(图像)的标准是一个孤立的成员也发生了变化。

答案(3)

克里斯·拉皮埃尔
克里斯·拉皮埃尔 2023年3月22日
编辑:克里斯·拉皮埃尔 2023年3月22日
bwmorph与 “桥” 只选择关闭1像素宽的缺口。
考虑将灰度图像转化为一个二进制图像使用前 边缘 。这将给你最高的梯度边缘,使结果更加清晰。
有呈现差异,当我在线运行代码。结果是相同的,但它们看起来不同,所以我将添加桌面的图像结果。
一个= imread (“image.png”);
BW = imbinarize(一个);
BW =边缘(BW,“索贝尔”);
imshow (BW)
然后您可以执行多个变形操作,以确保任何转生的差距是封闭和孤立像素移除。
BW2 = bwmorph (BW,变厚的);%添加像素对象的外观到这样做会导致之前被8-connected无关的对象。
BW2 = bwmorph (BW,“桥”);%桥无关的像素
BW2 = bwmorph (BW2,“关闭”);%扩张侵蚀紧随其后
BW2 = bwmorph (BW2,“缩水”);%减少通过删除对象分像素边界的对象
BW2 = bwmorph (BW2,“刺激”);%去除刺激像素
BW2 = bwmorph (BW2,“清洁”);%去除孤立像素
imshow (BW2)
3评论
Chapz82
Chapz82 2023年3月23日
你好,
我添加了一个PS信息在这个任务应该做什么。我不知道我能给你更多细节,但请提出来。我已经尝试regionprops,不能让它工作的例子

登录置评。


为副总经理
为副总经理 2023年3月23日
编辑:为副总经理 2023年3月23日
让我们先从任务显然期望你做什么。我们可以看到,孤立的铁锹将blob # 2,它的周长是多少?
一个= imread (“//www.tianjin-qmedu.com/matlabcentral/answers/uploaded_files/1332410/image.png”);
% binarize
BW = imbinarize(一个);%对象是在后台
%找到周边的原始图像的背景
P = bwperim (BW, 4);
P = imclearborder (P);%必要的,因为图片是错误的极性
%显示对象(对象)6日
imshow (label2rgb (bwlabel (P)、线(7)))
%的面积周长的blob的P
S = regionprops (P,“区域”);
S.Area
ans = 612
ans = 403
ans = 1787
ans = 27
ans = 1028
ans = 7
这变得更明智的如果你处理所有的二进制映像黑桃在哪里 前景 。如果你这样做,你不需要去除图像边缘效应的边界,你实际上有一个以上的对象。注意,因为我们计算周长的黑桃在白色背景的洞,而是几个像素的结果略有不同。说,它仍然是在需求。
一个= imread (“//www.tianjin-qmedu.com/matlabcentral/answers/uploaded_files/1332410/image.png”);
% binarize
BW = ~ imbinarize(一个);%前景中的对象
P = bwperim (BW, 4);
%的面积周长的blob的P
S = regionprops (P,“区域”);
S.Area
ans = 609
ans = 399
ans = 1786
ans = 31
ans = 1028
ans = 12
另外,由于我们现在正在处理一个积极的形象,我们可以问问regionprops周长()的对象。这不会有与图像倒置,因为所有的黑桃洞属于一个对象。
记住这个由不同的方法(见计算周长 regionprops ()),所以它不会匹配给定的期望。
一个= imread (“//www.tianjin-qmedu.com/matlabcentral/answers/uploaded_files/1332410/image.png”);
% binarize
BW = ~ imbinarize(一个);%前景中的对象
%被regionprops周长计算()
S = regionprops (BW,“周长”);
S.Perimeter
ans = 678.7950
ans = 450.6040
ans = 2.0002 e + 03
ans = 1.1716 e + 03
2的评论
为副总经理
为副总经理 2023年3月23日
编辑:为副总经理 2023年3月23日
老实说,我不知道为什么他们要你通过edgefinding放在第一位。这是不必要的,它将严重依赖edgefinding是如何执行的。由于图像噪声,也很敏感的微小差异图像的关键。除非你知道他们是怎么做的,不可能你会得到的结果精确匹配给定的范围在不同的一组图像。
理智的人扔了这些数字,因为他们的特定的方法显然没有披露。你会找到一个基于期望值的观察使用任何方法你实际使用,无论你有图片。
甚至更好的是,你不会使用edgefinding。这将是简单的,不太灵敏的噪音,你不需要想很多方法之一是用于计算周长。它还避免了并发症,一个对象有多个边缘有一个洞。
一个= imread (“//www.tianjin-qmedu.com/matlabcentral/answers/uploaded_files/1334345/image.png”);
% binarize
BW = ~ imbinarize(一个);%对象是在后台
%得到对象的面积
S = regionprops (BW,“区域”);
面积= vertcat (S.Area)
面积= 8×1
7543 7541 7539 7545 36382 7537 14973 7542
%哪些孤立?
限制= (7510 - 7570);%选择限制,适合的方法
匹配= > =限制(1)&地区< =限制(2);
nnz(匹配)%多少?
ans = 6
%已经有一个函数来选择blob的区域
孤立= bwareafilt (BW,限制);
imshow(隔离)
一个= imread (“//www.tianjin-qmedu.com/matlabcentral/answers/uploaded_files/1334350/image.png”);
% binarize
BW = ~ imbinarize(一个);%对象是在后台
%得到对象的面积
S = regionprops (BW,“区域”);
面积= vertcat (S.Area)
面积= 8×1
7170 7180 7181 7185 21157 7185 7182 7185
%的匹配指定范围?
限制= (7150 - 7210);
匹配= > =限制(1)&地区< =限制(2);
nnz(匹配)%多少?
ans = 7
孤立= bwareafilt (BW,限制);
imshow(隔离)
一个= imread (“//www.tianjin-qmedu.com/matlabcentral/answers/uploaded_files/1334355/image.png”);
% binarize
BW = ~ imbinarize(一个);%对象是在后台
%得到对象的面积
S = regionprops (BW,“区域”);
面积= vertcat (S.Area)
面积= 7×1
7180 7178 13983 22153 7188 19615 7176
%的匹配指定范围?
限制= (7150 - 7210);
匹配= > =限制(1)&地区< =限制(2);
nnz(匹配)%多少?
ans = 4
孤立= bwareafilt (BW,限制);
imshow(隔离)
注意紧密组合这些区域,他们有多么明显的不受欢迎的斑点。考虑的情况下两张图片与孤立的俱乐部。这些俱乐部的周长变化超过7%的平均周长。另一方面,相同的blob不同的地区只有0.2%的区域。
这就是我 做的,但如果我们试图使周边匹配一些预定义的结果从一个未知的过程,我们必须继续猜测方法。显然我之前猜测没有足够接近如何做之前。
考虑到周边的分散指标使用各种方法,我几乎敢打赌(例如)403 + -15 确切的 传播的价值观他们写道,他们观察到的任何代码与零利润。考虑到任务的味道,我不怀疑这一点。

登录置评。


图像分析
图像分析 2023年3月23日
我理解你想要内部边缘,这些是非常微弱的/弱。问题是嘈杂的图像边缘只是在某些地方是不存在的。如果降低阈值足以让那些弱边缘,你开始接噪声边缘。所以它可能可能在边缘,总是会有差距,你将不得不使用边缘连接算法,这是更复杂的。无论如何,这是我到目前为止:
%可选的初始化步骤
clc;%清除命令窗口。
关闭所有;%关闭所有数据(除了imtool。)
清晰;%擦掉所有现有的变量。或者clearvars如果你想要的。
工作空间;%确定工作区面板显示。
格式长g;
格式紧凑的;
字形大小= 18;
grayImage = imread (“spades.png”);
次要情节(2 2 1);
imshow (grayImage);
标题(原始图像的,“字形大小”、字形大小);
edgeImage = imgradient (grayImage);
次要情节(2,2,2);
imshow (edgeImage []);
impixelinfo;
标题(的边缘图像,“字形大小”、字形大小);
次要情节(2、2、3);
直方图(edgeImage, 100);
网格;
%交互和视觉上设置一个阈值灰度图像。
% //www.tianjin-qmedu.com/matlabcentral/fileexchange/29372-thresholding-an-image?s_tid=srchtitle
lowThreshold = 52个;
highThreshold = 255;
% (lowThreshold highThreshold] =阈值(lowThreshold、highThreshold edgeImage)
掩码= edgeImage > lowThreshold;
%摆脱小颗粒
掩码= bwareaopen(面具,10);
次要情节(2、2、4);
imshow(面具,[]);
impixelinfo;
标题(“面具”形象,“字形大小”、字形大小);

类别

找到更多的在图像处理和计算机视觉帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!