我如何应用一个函数到图像,使它找到检测图形形状?

16次(最近30天)
德米特里·苏科夫
德米特里·苏科夫 2020年5月7日
评论: 图像分析 2020年10月23日
你好!
我有与向度类型的形状的图像;
我已经使用iMcontour函数在图像中找到形状的轮廓;
现在我已经有了喜欢的圆/平方/ ....形状的图像(轮廓);
我知道函数1的图是圆的,函数2的图是方的....(为什么“圆”和“方”用逗号分隔?
我没有想法如何使MatLab在以下方式:我有一个函数,图是谁提醒“圆”,让它成为function1,我有“圆”的轮廓形状(用imcontour)的形象,所以现在我想把MatLab找到并计算所有“圆”形状的轮廓形象,他的轮廓与function1(形状)可以被描述
问题是,这些家伙,不完全是圆/方,他们是“过渡”圆/方形式,就像它不是圆/方,只是它的轮廓让人想起圆/方形状,我必须精确地处理这些形状,所以imfindcircles和bound box,这不是我想要的(因为他们只是画“纯粹的”圆/正方形,即使那里不是一个圆/正方形)(正如我所理解的)
既然我没有许可给出任何照片,那么我就会得到任何帮助
请耐心,我是一种MatLab lamer

接受答案

图像分析
图像分析 2020年5月7日
13评论
图像分析
图像分析 2020年10月23日
请参阅此并根据需要进行适应:
clc;%清除命令窗口。
fprintf('开始运行%s。m…\ n”,mfilename);
关闭全部;%关闭所有数据(imtool.除外)
清除;删除所有已存在的变量。或者clearvars,如果你想的话。
工作区;%确保显示工作区面板。
格式长摹;
格式紧凑的;
fontSize的= 22;
%------------------------------------------------------------------------------------------------------------------
%在图像中读取
夹= PWD;
basefilename ='八..;
获取完整的文件名,前面加上路径。
fullfilename = fullfile(文件夹,basefilename);
%检查文件是否存在。
如果〜存在(fullFileName,“文件”
%文件不存在——在那个文件夹中没有找到它。
%通过剥离文件夹来检查文件的整个搜索路径(其他文件夹)。
fullFileNameOnSearchPath = baseFileName;%这次没有路径。
如果~存在(fullFileNameOnSearchPath“文件”
%依然没有找到它。提醒用户。
errormessage = sprintf('错误:搜索路径文件夹中不存在%s。,fullfilename);
uiwait (warndlg (errorMessage));
返回;
别的
%它在某处找到它。
夹= fileparts(其(fullFileNameOnSearchPath));%确定文件夹的位置。
fullfilename = fullfile(文件夹,basefilename);
结尾
结尾
grayImage = imread (fullFileName);
%获取图像的尺寸。
%NumbumoOfColorChannels应该是= 1的灰度图像,3个用于RGB彩色图像。
[行,列,numberofcolorChannels] =大小(灰度);
如果numberofcolorchannels> 1
%它不是真正的灰度,就像我们预期的那样 - 它是颜色的。
%使用所有通道的加权和创建灰度图像。
灰度= rgb2gray(灰度);
%替代方法:通过只取绿色通道将其转换为灰度,
%,它在典型的快照中是噪声最小的通道。
%灰度=灰度(:,:,2);%采取绿色频道。
结尾
%显示图像。
副区(2,2,1);
imshow (grayImage []);
标题('原始图像​​''字体大小'字形大小,“翻译”'没有任何');
Impixelinfo;
hFig = gcf;
hfig.windowstate =“最大化”;%可能无法在MATLAB的早期版本中工作。
的DrawNow;
%该图像需要被颠倒,从而螺栓是白色的
面具=〜Imbinarize(灰度);
%------------------------------------------------------------------------------------------------------------------
图像的%分割
%填补
= imfill(面具,面具“黑洞”);
%提取只有大于1000的斑点。
Mask = bwareaopen(Mask, 1000, 4);的4%连通
%显示掩模图像。
副区(2,2,2);
imshow(面具);
标题= Sprintf('面具');
标题(标题,'字体大小'字形大小,“翻译”'没有任何');
Impixelinfo;
的DrawNow;
得到质心
道具= regionprops(面具,“重心”);
找到界限
边界= bwboundaries(面具);
得到每个边界的半径和角度
%并将它们添加到道具结构。
为了K = 1:长度(边界)
thisBoundary = {k}边界;
道具(k)。x = thisBoundary(:, 2);
道具(k).y =此北面(:,1);
道具(k)。xCentroid =道具(k) .Centroid (1);
道具(k)的.yCentroid =道具(k)的.Centroid(2);
副区(2,2,2);
抓住;
图(道具(k).xcentroid,道具(k).ycentroid,' r + '“MarkerSize”,50,'行宽',2);
得到半径和角度。
道具(k).radius = sqrt((props(k).x - props(k).xcentroid)。^ 2 +(道具(k).y - props(k).ycentroid)。^ 2);
分子=道具(k)。y -道具(k) .yCentroid;
分母=道具(k)。x -道具(k) .xCentroid;
道具(k)。角= atand(分子/分母);
%绘制半径。
副区(2,2,3);
情节(道具(k) .radius,' - ''行宽',2);
网格;
包含(“像素指数”'字体大小'、字形大小);
ylabel (“半径”'字体大小'、字形大小);
标题(“半径”'字体大小'、字形大小);
抓住;
%绘图角度。
子图(2,2,4);
情节(道具(k).angles,' - ''行宽',2);
网格;
包含(“像素指数”'字体大小'、字形大小);
ylabel ('角度''字体大小'、字形大小);
标题('角度''字体大小'、字形大小);
抓住;
结尾
fprintf('运行完%S.M ... \ N',mfilename);

登录评论。

更多答案(0)

s manbetx 845


释放

R2017B.

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!