wulabahaaaaaaa 2023-05-21 16:50 采纳率: 33.3%
浏览 90
已结题

关于#matlab#的问题:平滑图中曲线并计算每个同心圆的直径(毫米做单位)

img

平滑图中曲线,并计算图中每个同心圆的直径(毫米做单位)。
这是等倾干涉环细化后的图像。

我用的图像

img

我目前的代码

0%-----------------------第一部分(读取)---------------------------------
%读取图片
A1=imread('51um.jpg');
%真彩转灰度
A2=rgb2gray(A1);
figure,imshow(A2),title('result');
%-----------------------第二部分(增强)---------------------------------
%直方图均衡化
B1=adapthisteq(A2); 
figure,imshow(B1),title('result');
%-----------------------第三部分(降噪)---------------------------------
%均值滤波
C1= filter2(fspecial('average',7),B1)/255;%-
C2 = medfilt2(C1);                                  
%中值滤波部分
C3=medfilt2(C2,[7,7]);    %--
%低通滤波
[f1,f2] = freqspace(size(C3),'meshgrid'); %生成频率序列矩阵
Hd = ones(size(C3));   
r = sqrt(f1.^2 + f2.^2); 
Hd(r>0.5) = 0;   %构造滤波器
Y=fft2(double(C3));   
Y=fftshift(Y);   
Ya=Y.*Hd;   %滤波
Ya=ifftshift(Ya);   
C4=ifft2(Ya);
figure,imshow(C4),title('result');
%最大类间方差法分割图像
level=graythresh(C4);
E1=imbinarize(C4,level);             
disp(strcat('graythresh 计算灰度阈值1:',num2str(uint8(level*255))));
figure,imshow(E1),title('result');
%闭运算
se2=strel('disk',7);
F1=imclose(E1,se2);    
%细化
F2=zs(F1);
figure,imshow(F2),title('result');
F3=bwmorph(F2,'spur',Inf);
F4=bwmorph(F3,'bridge');
figure,imshow(F4),title('result');
  • 写回答

4条回答 默认 最新

  • PhoenixRiser 2023-05-22 16:41
    关注

    TechWhizKid参考GPT回答:

    img

    
    %-----------------------第一部分(读取)---------------------------------
    %读取图片
    A1=imread('A.png');
    %真彩转灰度
    A2=rgb2gray(A1);
    figure,imshow(A2),title('result');
    
    %-----------------------第二部分(增强)---------------------------------
    %直方图均衡化
    B1=adapthisteq(A2); 
    figure,imshow(B1),title('result');
    
    %-----------------------第三部分(降噪)---------------------------------
    %均值滤波
    C1= filter2(fspecial('average',7),B1)/255;%-
    C2 = medfilt2(C1);                                  
    %中值滤波部分
    C3=medfilt2(C2,[7,7]);    %--
    %低通滤波
    [f1,f2] = freqspace(size(C3),'meshgrid'); %生成频率序列矩阵
    Hd = ones(size(C3));   
    r = sqrt(f1.^2 + f2.^2); 
    Hd(r>0.5) = 0;   %构造滤波器
    Y=fft2(double(C3));   
    Y=fftshift(Y);   
    Ya=Y.*Hd;   %滤波
    Ya=ifftshift(Ya);   
    C4=ifft2(Ya);
    figure,imshow(C4),title('result');
    
    %最大类间方差法分割图像
    level=graythresh(C4);
    E1=imbinarize(C4,level);             
    disp(strcat('graythresh 计算灰度阈值1:',num2str(uint8(level*255))));
    figure,imshow(E1),title('result');
    
    %闭运算
    se2=strel('disk',7);
    F1=imclose(E1,se2);    
    
    %细化
    F2 = bwmorph(F1, 'thin', Inf);
    figure,imshow(F2),title('result');
    F3=bwmorph(F2,'spur',Inf);
    F4=bwmorph(F3,'bridge');
    figure,imshow(F4),title('result');
    
    
    %-----------------------第四部分(计算同心圆直径)---------------------------------
    % 对边缘检测结果进行填充,得到完整的同心圆
    F5 = imfill(F4, 'holes');
    figure,imshow(F5),title('Filled Image');
    
    % 使用regionprops函数计算各区域的面积和边界矩形
    props = regionprops(F5, 'Area', 'BoundingBox');
    % 对每个区域计算直径
    minArea = 100; % 设置面积最小值,过滤掉小于这个面积的圆
    
    for k = 1 : length(props)
       % 计算区域面积
       area = props(k).Area;
    
       % 如果面积大于设定的最小值,才计算和打印直径
       if area > minArea
           % 计算区域对应的同心圆直径,假设每个像素对应1毫米
           diameter = sqrt(area / pi) * 2;  % 因为面积 = pi * (d / 2)^2
    
           fprintf('Region %d, Diameter = %f mm\n', k, diameter);
       end
    end
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 5月30日
  • 已采纳回答 5月22日
  • 修改了问题 5月21日
  • 修改了问题 5月21日
  • 展开全部