提取边缘的形状

8视图(30天)
你好。
我有一个不规则的形状像下面的图片(s)(创建使用 inpolygon )。
我只想提取这种形状的外边缘,这样我只能有一个想法的形状是什么(而不是完整的内部点)。
我用轮廓( imcontour )模块强调了地区我渴望获得(见下图)。
所以我只是想达到这些黄色区域。
帮助将更加感激。提前谢谢:)
1评论
为副总经理
为副总经理 2022年12月19日
编辑:为副总经理 2022年12月19日
如果孵化模式是使用inpolygon创建(),并不意味着,你已经定义了边界的多边形?
这将有助于一个例子描述数据和采取的步骤的形式把它变成这种形式。

登录置评。

接受的答案

图像分析
图像分析 2022年12月20日
好的,我创建的二进制图像在Photoshop中红色十字准线截图。它是连接。然后我写代码的周长形象,并列表(x, y)坐标24小时排序的方式使用 bwboundaries
clc;%清除命令窗口。
关闭所有;%关闭所有数据(除了imtool。)
清晰;%擦掉所有现有的变量。或者clearvars如果你想要的。
工作空间;%确定工作区面板显示。
格式长g;
格式紧凑的;
字形大小= 20;
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%读入图像
文件夹= [];
baseFileName =“binaryImage.png”;
fullFileName = fullfile(文件夹,baseFileName);
%检查文件是否存在。
如果~存在(fullFileName“文件”)
%的文件不存在,没有找到它在该文件夹。
%检查整个搜索路径(其他文件夹)去掉文件的文件夹。
fullFileNameOnSearchPath = baseFileName;%没有路径。
如果~存在(fullFileNameOnSearchPath“文件”)
%仍然没有找到它。提醒用户。
errorMessage = sprintf (的错误:% s在搜索路径的文件夹不存在。,fullFileName);
uiwait (warndlg (errorMessage));
返回;
结束
结束
grayImage = imread (fullFileName);
%得到图像的尺寸。
% numberOfColorChannels应该为灰度图像,= 1和3的RGB彩色图像。
(行、列,numberOfColorChannels) =大小(grayImage)
如果numberOfColorChannels > 1
%这不是灰度像我们预期的颜色。
流(“这不是真正的灰度像我们预期——这是颜色\ n”);
%提取蓝色通道。
grayImage = rgb2gray (grayImage);
%更新图片的尺寸。
% numberOfColorChannels应该为灰度图像,= 1和3的RGB彩色图像。
(行、列,numberOfColorChannels) =大小(grayImage)
结束
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%显示图像。
次要情节(2 2 1);
imshow (grayImage);
impixelinfo;
轴(“上”,“图像”);
标题(的原始灰度图像,“字形大小”字形大小,“翻译”,“没有”);
%最大化窗口。
g = gcf;
g。WindowState =“最大化”;
drawnow;
% Binarize
binaryImage = grayImage > 128;
%叫bwperim
perimImage = bwperim (binaryImage);
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%显示图像。
次要情节(2,2,2);
imshow (perimImage);
impixelinfo;
轴(“上”,“图像”);
标题(“周边的形象”,“字形大小”字形大小,“翻译”,“没有”);
%发现xp和yp(无序)
[yp, xp] =找到(perimImage);
%找到边界(排序)
%情节的边界气泡在上面的覆盖原始灰度图像
使用bwboundaries返回的坐标()%。
% bwboundaries()返回一个单元阵列,每个单元格包含对象的行/列坐标的图像。
次要情节(2、2、3);
imshow (grayImage);%可选:显示原始图像。或者你可以把二进制图像显示如果你想。
%这里就是我们每个团的边界。
边界= bwboundaries (binaryImage);
%边界单元阵列,每个团的一个细胞。
%在每个单元是一个n除以2的坐标列表(行、列)格式。注意:没有(x, y)。
% 1列是行,或y。第2列列,或x。
numberOfBoundaries =大小(边界,1);%计算边界,所以我们可以使用它在我们的for循环
%这就是我们实际上情节中的每一个blob叠加的界限。
持有;%不要让边界吹走显示图像。
k = 1: numberOfBoundaries
thisBoundary = {k}边界;%获得这个特定的blob的边界。
x = thisBoundary (:, 2);%第2列的列,这是x。
y = thisBoundary (: 1);%第1列的行,这是y。
情节(x, y,的r -,“线宽”3);%绘制边界为红色。
结束
持有;
标题= sprintf (' % d轮廓,从bwboundaries () ',numberOfBoundaries);
字形大小= 15;
标题(标题,“字形大小”、字形大小);
轴(“上”,“图像”);%确定图像不是人为紧张因为屏幕的长宽比。
6个评论
奥萨马-本·侯赛因
奥萨马-本·侯赛因 2022年12月22日
非常感谢图像分析。
边界功能工作正常。
感谢:)

登录置评。

答案(1)

图像分析
图像分析 2022年12月19日
如果你有一个数字图像,您可以使用 bwperim bwboundaries
您修改的代码片段:
%情节的边界气泡在上面的覆盖原始灰度图像
使用bwboundaries返回的坐标()%。
% bwboundaries()返回一个单元阵列,每个单元格包含对象的行/列坐标的图像。
imshow (originalImage之下);%可选:显示原始图像。或者你可以把二进制图像显示如果你想。
%这里就是我们每个团的边界。
边界= bwboundaries(面具);
%边界单元阵列,每个团的一个细胞。
%在每个单元是一个n除以2的坐标列表(行、列)格式。注意:没有(x, y)。
% 1列是行,或y。第2列列,或x。
numberOfBoundaries =大小(边界,1);%计算边界,所以我们可以使用它在我们的for循环
%这就是我们实际上情节中的每一个blob叠加的界限。
持有;%不要让边界吹走显示图像。
k = 1: numberOfBoundaries
thisBoundary = {k}边界;%获得这个特定的blob的边界。
x = thisBoundary (:, 2);%第2列的列,这是x。
y = thisBoundary (: 1);%第1列的行,这是y。
情节(x, y,的r -,“线宽”2);%绘制边界为红色。
结束
持有;
标题= sprintf (' % d轮廓,从bwboundaries () ',numberOfBoundaries);
字形大小= 15;
标题(标题,“字形大小”、字形大小);
轴(“上”,“图像”);%确定图像不是人为紧张因为屏幕的长宽比。
6个评论
图像分析
图像分析 2022年12月20日
你忘了附上代码或形象。好吧,我想我将不得不创建一个图像从你提供的截图,然后继续使用演示。我需要几分钟。

登录置评。

社区寻宝

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

开始狩猎!

翻译的