有人能帮我测量avgferet, avgminferet和区域边缘的我的形象在这段代码中

57视图(30天)
=边缘(边缘imgContrast,“精明”);
se = strel (“磁盘”1);
edgesClean = imclose(边缘,se);
edgesClean = imfill (edgesClean,“黑洞”);
zoneMask = zoneMask。* im2double (edgesClean)。* DD;
%计算连接组件
cc = bwconncomp (zoneMask);
%计算区域属性为每个连接组件在这个区
statscc = regionprops (cc、“区域”,“重心”,“偏心”,“周长”,“MajorAxisLength”,“MinorAxisLength”,“循环”);
%计算该区域的特性
numObjects = cc.NumObjects;
如果numObjects > 0
区域= [statscc.Area];
profileCounts (k) = numObjects;
totalArea (k) =(地区)和* pixelSize ^ 2;
zoneArea (k) =总和(zoneMask,“所有”)* pixelSize ^ 2;
%计算该区域的平均大小的线粒体
avgSize (k) =意味着(地区)* pixelSize ^ 2;
圆= [statscc.Circularity];
圆(圆> 1)= 1;%帽圆大于1 1
avgCircularity (k) =意味着(循环(isfinite(循环)));
ferets = [statscc.FeretDiameter];
avgFeret (k) =意味着(ferets) * pixelSize;
minFerets = [statscc.MinFeretDiameter];
avgMinFeret (k) =意味着(minFerets) * pixelSize;
结束
这个函数的工作吗?这是你如何正确计算feret直径和其他功能吗?谁能确认吗?谢谢你!
3评论
Chanille
Chanille 2023年4月27日上午
编辑:Chanille 2023年4月27日在9:20
@John D 'Errico 有wesite错误,我不小心重复的问题,这不是故意的。谢谢你带我注意到这个问题。

登录置评。

接受的答案

凯文·霍利
凯文·霍利 2023年4月27日在十12
imageData = imread (“C1_L1_WDa.jpg”);
imshow (imageData)
(行、列,numberOfColorChannels) = (imageData)大小;
如果numberOfColorChannels > 1
grayImage = rgb2gray (imageData);%转换为颜色。
结束
%应用背景减法。
grayImage = imtophat (grayImage strel (“磁盘”,100));
%这个数字越少越低脂滴
%应用对比校正。
grayImage = imadjust (grayImage);
%应用高斯过滤。
grayImage = imgaussfilt (grayImage 3);
%应用阈值。
thresholdValue = graythresh (grayImage);
binaryImage = imbinarize (grayImage thresholdValue);
%移除黑色细长的形状。
binaryImage = bwareaopen (binaryImage, 200);
binaryImage = imclearborder (binaryImage);
binaryImage = imfill (binaryImage,“黑洞”);
%的面具
%的阈值图像创建一个二进制的面具
gray_img = rgb2gray (imageData);%转换为颜色。
阈值= 5;
掩码= gray_img >阈值;
%去除小物体
min_size = 1000;
掩码= bwareaopen(面具,min_size);
%填补
= imfill(面具,面具“黑洞”);
%侵蚀和扩张掩模平滑去除噪声和边缘
se = strel (“磁盘”5);
掩码= imerode(面具,se);
掩码= imdilate(面具,se);
%定义像素大小的平方微米
pixelSize = 1;
numZones = 12;
字形大小= 12;
x = 4592.86363636364;
y = 705.954545454545;
%将通过计算找出最大距离的距离每一个角落。
distanceToUL =√(1 y ^ 2 + (1 - x) ^ 2);
distanceToUR =√(1 y ^ 2 +(列x) ^ 2);
distanceToLL =√(rows-y) ^ 2 + (1 - x) ^ 2);
distanceToLR =√(rows-y) ^ 2 +(列x) ^ 2);
maxDistance =装天花板(max ([distanceToUL、distanceToUR distanceToLL, distanceToLR]));
%计算每个区域的半径
半径= linspace (0 maxDistance numZones + 1);
% Preallocate
zonemask = 0(大小(面具,1),大小(面具,2),numZones + 1);
图=图;
imshow(面具)
图(图)
c (1) = drawcircle (“中心”(x, y),“半径”(1)半径,“线宽”,1“颜色”,“b”,“可见”,“关闭”);
%画出每个区域的圈子
2 = 2:numZones + 1
图(图)
c (ii) = drawcircle (“中心”(x, y),“半径”(2)半径,“线宽”,1“颜色”,“b”,“可见”,“关闭”);
zonemask(:,:,(二)= createMask (c (ii)) -createMask (c (ii-1));
viscircles ((x, y),半径(ii),“线型”,“——”,“线宽”1);
total_intensity (ii) =总和(总和(gray_img。* uint8(面具)。* uint8 (zonemask(:,:,(二))));%或替换binaryImage面具
total_zone_pixels (ii) =总和(总和(uint8(面具)。* uint8 (zonemask(:,:,(二))));
结束
mean_intensity_zone = total_intensity. / total_zone_pixels
mean_intensity_zone = 1×13
南20.2110 18.5171 18.3373 16.1967 20.3758 21.0019 24.8756 23.1034 23.8200 22.3985 23.9102 16.3538
您需要添加‘MaxFeretProperties’和‘MinFeretProperties regionprops作为输入
=边缘(边缘面具,“精明”);
se = strel (“磁盘”1);
edgesClean = imclose(边缘,se);
edgesClean = imfill (edgesClean,“黑洞”);
zoneMask =面具;
zoneMask = zoneMask。* im2double (edgesClean);% * DD;
%计算连接组件
cc = bwconncomp (zoneMask);
%计算区域属性为每个连接组件在这个区
statscc = regionprops (zoneMask,“区域”,“重心”,“偏心”,“周长”,“MajorAxisLength”,“MinorAxisLength”,“循环”,“MaxFeretProperties”,“MinFeretProperties”);
k = 1;
statscc
statscc =结构体字段:
面积:939999重心:[2.3244 e + 03 851.9382] MajorAxisLength: 5.1200 e + 03 MinorAxisLength: 1.4472 e + 03离心率:0.9592循环:1周长:0 MaxFeretDiameter: 5.4429 e + 03 MaxFeretAngle: -164.5824 MaxFeretCoordinates:[2×2双]MinFeretDiameter: 1462 MinFeretAngle: -90 MinFeretCoordinates:(2×2双)
%计算该区域的特性
numObjects = cc.NumObjects;
如果numObjects > 0
区域= [statscc.Area];
% profileCounts (k) = numObjects;
totalArea (k) =(地区)和* pixelSize ^ 2;
zoneArea (k) =总和(zoneMask,“所有”)* pixelSize ^ 2;
%计算该区域的平均大小的线粒体
avgSize (k) =意味着(地区)* pixelSize ^ 2;
圆= [statscc.Circularity];
圆(圆> 1)= 1;%帽圆大于1 1
avgCircularity (k) =意味着(循环(isfinite(循环)));
ferets = [statscc.MaxFeretDiameter];
avgFeret (k) =意味着(ferets) * pixelSize;
minFerets = [statscc.MinFeretDiameter];
avgMinFeret (k) =意味着(minFerets) * pixelSize;
结束
3评论
Chanille
Chanille 2023年4月28日10点
我改变了区域分割我觉得这就是为什么现在循环1和数据表现停滞不前。你能建议如何解决这个问题?我附上图片的完整的文件。

登录置评。

更多的答案(0)

社区寻宝

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

开始狩猎!

翻译的