如何检测一方截面图像的维度?

32视图(30天)
我有一个图片,我想要方钢的尺寸。有3个方块图中你可以找到。我已经上传图像。
我不知道如何开始。
2的评论
Atik阿明
Atik阿明 2023年5月31日15:46
这是超声检测后图像的提取。我有数据但在某些点数据选择不确定的数据包含401 x 401样品

登录置评。

接受的答案

图像分析
图像分析 2023年5月31日在十九31
试试这个:
%演示图像分析
clc;%清除命令窗口。
关闭所有;%关闭所有数据(除了imtool。)
清晰;%擦掉所有现有的变量。或者clearvars如果你想要的。
工作空间;%确定工作区面板显示。
格式长g;
格式紧凑的;
字形大小= 18;
markerSize = 40;
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%读入测试图像
文件夹= pwd;
baseFileName =“ultrasound.png”;
fullFileName = fullfile(文件夹,baseFileName);
%检查文件是否存在。
如果~存在(fullFileName“文件”)
%的文件不存在,没有找到它在该文件夹。
%检查整个搜索路径(其他文件夹)去掉文件的文件夹。
fullFileNameOnSearchPath = baseFileName;%没有路径。
如果~存在(fullFileNameOnSearchPath“文件”)
%仍然没有找到它。提醒用户。
errorMessage = sprintf (的错误:% s在搜索路径的文件夹不存在。,fullFileName);
uiwait (warndlg (errorMessage));
返回;
结束
结束
grayImage = imread (fullFileName);
%显示图像。
次要情节(2 2 1);
imshow (grayImage []);
impixelinfo;
轴(“上”,“图像”);
标题(原始图像的,“字形大小”字形大小,“翻译”,“没有”);
%得到图像的尺寸。
% numberOfColorChannels应该为灰度图像,= 1和3的RGB彩色图像。
(行、列,numberOfColorChannels) =大小(grayImage)
如果numberOfColorChannels > 1
%这不是灰度像我们预期的颜色。
流(“这不是真正的灰度像我们预期——这是颜色\ n”);
%提取马克斯通道。
% grayImage = max (grayImage [], 3);
%提取绿色通道。
grayImage = grayImage (:: 2);
结束
%最大化窗口。
g = gcf;
g。WindowState =“最大化”;
g。NumberTitle =“关闭”;
g。Name =的演示图像分析师”
drawnow;
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%阈值创建的面具黑点。
lowThreshold = 0;
highThreshold = 94;
%交互和视觉上设置一个阈值灰度图像。
% //www.tianjin-qmedu.com/matlabcentral/fileexchange/29372-thresholding-an-image?s_tid=srchtitle
% (lowThreshold highThreshold] =阈值(lowThreshold、highThreshold grayImage)
掩码= grayImage > = lowThreshold & grayImage < = highThreshold;
%检查领域的最初的面具
道具= regionprops(面具,“区域”);
allAreas =排序([props.Area])
% blob只有他们超过20000像素。
掩码= bwareafilt(面具,(20000年,正));
次要情节(2,2,2);
imshow(面具);
impixelinfo;
轴(“上”,“图像”);
标题(“面具”形象,“字形大小”字形大小,“翻译”,“没有”);
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%得到最终的地区和中心广场集合。
道具= regionprops (grayImage面具,“区域”,“重心”,“MeanIntensity”);
allAreas =排序([props.Area]);
meanBlobGrayLevels = [props.MeanIntensity];
次要情节(2、2、3);
imshow(面具);
impixelinfo;
轴(“上”,“图像”);
标题(“面具”形象,“字形大小”字形大小,“翻译”,“没有”);
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%假设他们是方形的。广场的宽度。
squareWidth =√allAreas);
%情节广场形象
次要情节(2、2、4);
imshow (grayImage);
impixelinfo;
轴(“上”,“图像”);
标题(“面具”形象,“字形大小”字形大小,“翻译”,“没有”);
标题= sprintf (的意思是地区= %。一层灰色的水平。”meanBlobGrayLevels)
标题(标题,“字形大小”字形大小,“翻译”,“没有”);
持有;
k = 1:长度(道具)
%得到矩形形式(xLeft顶端y,宽度、高度);
r =[道具(k) .Centroid (1) - squareWidth (k) / 2,道具(k) .Centroid (2) - squareWidth (k) / 2, squareWidth (k), squareWidth (k)]
矩形(“位置”r“EdgeColor”,“y”,“线宽”2);
结束
持有;
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%的边界地区和情节在原始图像。
%情节的边界气泡在上面的覆盖原始灰度图像
使用bwboundaries返回的坐标()%。
% bwboundaries()返回一个单元阵列,每个单元格包含对象的行/列坐标的图像。
%这里就是我们每个团的边界。
边界= 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 ('意味着面积= %。1f pixels with a threshold of %d.',意味着(allAreas) highThreshold);
字形大小= 15;
标题(标题,“字形大小”、字形大小);
轴(“上”,“图像”);%确定图像不是人为紧张因为屏幕的长宽比。
这样做同样明亮的近似方形的地区。

答案(1)

图像分析
图像分析 2023年5月31日15:46
编辑:图像分析 2023年5月31日15:50
简单阈值的灰度图像(不是伪彩色图像)和电话 bwareafilt 提取3大气泡。然后你可以计算区域,平均强度,边界框,或任何你想要的。
简而言之:
掩码= bwareafilt (grayImage > someThreshold, 3);
道具= regionprops (“表”、面具、grayImage“区域”,的边界框(“大小),“MeanIntensity”)
为一个完整的演示,看到我 图像分割的教程 我的文件交换 :
是一个通用的、通用的演示如何阈值图像找到气泡,气泡,然后衡量事情和提取 某些 blob基于区域或直径。
也看到
交互式功能找到适当的阈值,因为它是一个主观判断的问题。
3评论
为副总经理
为副总经理 2023年5月31日21:18
猜测。
inpict = imread (“notdata.png”);
%的图形区作物截图
hsvpict = rgb2hsv (inpict);
掩码= hsvpict (:: 2) > 0.5;
掩码= bwareafilt(面具,1);
S = regionprops(面具,的边界框(“大小));
inpict = imcrop (inpict S.BoundingBox);
%试图填补的注释
掩码=所有(inpict > = 0.9 * 255, 3);
掩码= imdilate(面具,(3));
c = 1:尺寸(inpict, 3)
inpict (:,:, c) = regionfill (inpict (:: c),面具);
结束
%猜猜colormap和估计数据
%我们不知道它在规模,所以就把它放在单位比例
CT =喷气机(256);
estdata = im2double (rgb2ind (inpict, CT));
%现在我们有一些相似的数据
imshow (estdata)
%的ROI = drawrectangle (gca)
…但是如果你有数据,没有理由估计从截图。用实际的数据。

登录置评。

社区寻宝

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

开始狩猎!