我想找形的边长在给定的图像。
5视图(30天)
显示旧的评论
我有一个小幅的形象和想强调的边缘三角形和还发现每个三角形的每条边的长度。显示高亮显示的三角形,三角形的每条边的长度。
三角形的边缘不直,但很少有不均匀(曲线)线。我想强调的边缘成一条直线。也有不同的形状除了三角形,我必须首先检测一个三角形(也许关于夹角两行),然后找到三角形的每条边的长度。
0评论
答案(1)
图像分析
2023年6月11日
帮助houghlines
11日评论
图像分析
2023年6月11日
然后使用
帮助imdistline
imdistline——距离工具imdistline对象封装了一个距离工具,包括一个交互式线在一个图像,配上一个文本标签显示线端点之间的距离。创建h = imdistline h = imdistline (hparent) h = imdistline (___, x, y)输入参数hparent——处理父对象处理x - x坐标的端点2-element数值向量y - 2-element数字矢量的端点坐标属性可删除的ROI可以删除真(默认)|假对象函数getLabelVisible——返回可见性的文本标签距离工具setLabelVisible——可见性设置文本标签的距离工具getLabelHandle——返回处理文本标签的距离工具getLabelTextFormatter——返回格式文本标签的距离工具setLabelTextFormatter——设置格式用于显示文本标签的距离工具getAngleFromHorizontal——返回工具和水平轴夹角距离getDistance——返回距离的端点之间距离工具看到也行,画直线中引入图像处理工具箱之前为imdistline doc imdistline R2006a文档
Surabhi一个年代
2023年6月11日
编辑:Surabhi一个年代
2023年6月11日
例子很好但我不能根据我的需求。所以我问你解释编码部分。
边缘不直,弯曲的. .这些函数是无法检测到完整的边缘
图像分析
2023年6月11日
那么也许你会发现
画直线
更好。我没有,但是我做了演示
drawpoint
,
drawpolygon
,
drawcircle
,
drawrectangle
。这将是直接的和容易使轻微改变其中的一个
画直线
代替。
Surabhi一个年代
2023年6月12日
哦,好吧。我能创建一个但不使用任何代码。你能请帮忙吗?我不是三角形的数字图像。我不知道什么是错误的代码。
clc;
关闭所有;
清晰的所有;
%进行边缘检测
edgeImage = imread (“smooth_imgprocessed_in_matlabcode.jpg”);
%将小幅图像转换为逻辑
binaryImage =逻辑(edgeImage);
%执行团分析来检测单个三角形
blobAnalysis = vision.BlobAnalysis (“AreaOutputPort”假的,“BoundingBoxOutputPort”,真的,“CentroidOutputPort”假的,“MinimumBlobArea”,100);
bbox =步骤(blobAnalysis binaryImage);
%计算为每个三角形边长
numTriangles =大小(bbox, 1);
edgeLengths = 0 (numTriangles, 3);
%创建图像的一个副本显示三角形数
outputImage = edgeImage;
为我= 1:numTriangles
%提取当前三角形的边界框的坐标
x = bbox(我,1);
y = bbox(我,2);
宽度= bbox(我,3);
身高= bbox(我,4);
%从图像边缘提取三角形区域
triangleImage = binaryImage (y, y +高为1,x: x +宽度);
%对三角形执行霍夫变换图像
[H,θ,ρ]=踝关节(triangleImage);
%设置最小直线长度和间隙参数“houghpeaks”
minLineLength = 30;
maxLineGap = 5;
%在霍夫变换检测峰值
山峰= houghpeaks (H 3“阈值”,0.3 *马克斯(H (:))“NHoodSize”5 [5]);
%使用霍夫变换提取行
行= houghlines (triangleImage,θ,ρ,山峰,“FillGap”maxLineGap,的最小长度,minLineLength);
%计算三角形的边长
如果长度(线)= = 3
为j = 1:3
edgeLengths规范(i, j) = ((j)行。point1 - (j) .point2行);
结束
%显示图像上的三角形数
textPosition =[双(x)双(y)] + [10、10];
outputImage = insertText (outputImage、textPosition num2str(我),“输入TextColor”,“红色”,“字形大小”12);
结束
结束
%显示每个三角形的边长
为我= 1:numTriangles
disp ([“三角形”num2str(我),的边缘长度:num2str (edgeLengths(我,:))));
结束
%显示图像与三角形数
imshow (outputImage);
标题(数字图像与三角形的);
图像分析
2023年6月12日
%演示如何画直线可用于绘制线条和测量距离的图像。
clc;%清除命令窗口。
关闭所有;%关闭所有数据(除了imtool。)
清晰;%擦掉所有现有的变量。或者clearvars如果你想要的。
工作空间;%确定工作区面板显示。
格式长g;
格式紧凑的;
字形大小= 16;
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
%显示演示在最大化窗口形象。
rgbImage = imread (“peppers.png”);
hFig1 =图;
imshow (rgbImage);
hFig1。WindowState =“最大化”;
hFig1。NumberTitle =“关闭”;
hFig1。Name =的演示图像分析师”;
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
%要求用户在图像画线。
uiwait (helpdlg (画一条线。单击鼠标按钮,拖动,然后释放鼠标按钮。));
按钮=“是的”;
lineCount = 0;
xy = 0 (1、4);
而包含(按钮,“是的”,“IgnoreCase”,真正的)
%的用户绘制一条直线。它抬起鼠标就退出。
线=画直线();
%的坐标形式(xLeft顶端y,宽度、高度)。
roiPosition = hLine.Position;%第1列是x值,第二列是y。
lineCount = lineCount + 1;
%保存坐标。格式(x1, x2, y1, y2)
xy (lineCount:) = roiPosition (:)”;
%删除ROI的对象。
删除(线);
%,取而代之的是彩色线图形叠加。
持有在;
情节(xy (lineCount 1:2), xy (lineCount 3:4)“。”,“线宽”2,“MarkerSize”,30);
标题= sprintf (“你% d线到目前为止。”,lineCount);
标题(标题,“字形大小”、字形大小);
%询问用户是否要点击另一个。
消息= sprintf (到目前为止' % d线绘制。\ nDraw另一个行吗?”,lineCount);
按钮= questdlg(消息、消息“是的”,“不——辞职”,“是的”);
如果包含(按钮,“退出”,“IgnoreCase”,真正的)
打破;
结束
结束
持有从;
%得到线的长度。
△= xy (:, 2) - xy (: 1);
δy = xy (:, 4) - xy (:, 3);
linelength = sqrt(△^ 2 +δy。^ 2);
meanLength =意味着(linelength);%得到意味着所有的线的长度。
标题= sprintf (“你画了% d线。\ nMean线长度= %。1 f像素”。、lineCount meanLength);
流(“% s \ n”标题)
标题(标题,“字形大小”、字形大小);
%显示命令窗口坐标。
xy
% = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
%显示线长度为条形图。
hFig2 =图;
hFig2。NumberTitle =“关闭”;
hFig2。Name =的演示图像分析师”;
次要情节(1、2、1);
酒吧(linelength);
yline (meanLength“颜色”,“r”,“线宽”2);
网格在;
包含(“行号”,“字形大小”、字形大小);
ylabel (“像素线长”,“字形大小”、字形大小);
标题= sprintf (% d线的长度你画的,lineCount);
标题(标题,“字形大小”、字形大小);
%显示柱状图的线的长度。
次要情节(1、2、2);
直方图(linelength);%的直方图,并自动绘制条形图线长度分布。
参照线(meanLength“颜色”,“r”,“线宽”2);
网格在;
包含(“像素线长”,“字形大小”、字形大小);
ylabel (“数”,“字形大小”、字形大小);
标题= sprintf ('意味着线长度= %。1 f像素”。,meanLength);
标题(标题,“字形大小”、字形大小);
hFig2。WindowState =“最大化”;
Surabhi一个年代
2023年6月12日
谢谢你的演示。有没有办法的长度将会自动显示出来,没有用户画线。当我ahev amny样品我不能继续画线长度。所以我希望代码本身自动检测长度,我想我已经完成了一半的代码我早些时候提到的评论。
一个错误发生
无法完成的行动,因为页面所做的更改。重新加载页面更新状态。
你也可以从下面的列表中选择一个网站
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。
欧洲