⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 huidulashen.m

📁 这个程序能清楚显示灰度图形的灰度直方图
💻 M
字号:
%%处理裂纹, 选取合适阈值
clear
I=imread('E:\工件图像\裂纹\D10.4Xd5.5X1(1)\1.bmp','bmp');
%I=rgb2gray(I);
I=medfilt2(I);

height=576;
width=768;
%imshow(I);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
bw=imhist(I);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5%
%消除直方图噪声
aw=bw;
bw=bw';
x=1:256;
for j=1:5
  for i=1:255
     if abs(bw(i)-bw(i+1))>1
         bw(i+1)=fix(bw(i)+bw(i+1))/2;
     end
  end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%55
%选取合适分割阈值
max=0;
xmax=0;
for i=1:256
    if bw(i)>0
       if max<bw(i)
           max=bw(i);
           xmax=i;
       end
    end
end
min=max;
xmin=0;
for i=xmax:256
    if bw(i)>=0
        if min>bw(i)
            min=bw(i);
            xmin=i;
        end
    end
end
max1=0;
xmax1=0;
for i=xmax+10:xmin-4
    if bw(i)>0
        if bw(i)>(bw(i-1)+bw(i-2)+bw(i-3)+bw(i-4))/4
            if bw(i)<(bw(i+1)+bw(i+2)+bw(i+3)+bw(i+4))/4
               if max1<bw(i)
                   max1=bw(i);
                   xmax1=i;
               end
           end
        end
    end
end
max2=0;
xmax2=0;
for i=xmin-5:-1:xmax1+10
    if bw(i)>0
        if bw(i)>(bw(i-1)+bw(i-2)+bw(i-3)+bw(i-4))/4
            if bw(i)>(bw(i+1)+bw(i+2)+bw(i+3)+bw(i+4))/4
            if max2<bw(i)
               max2=bw(i);
               xmax2=i;
               break;
            end
           end
        end
    end
end
xmin1=0;
min1=max1;
for i=xmax:xmax1
    if bw(i)>0
        if bw(i)<(bw(i+1)+bw(i+2)+bw(i+3)+bw(i+4))/4
            if bw(i)<(bw(i-1)+bw(i-2)+bw(i-3)+bw(i-4))/4
                if min1>bw(i)
                    min1=bw(i);
                    xmin1=i;
                end
            end
        end
    end
end
min2=max1;
xmin2=0;
for i=xmax2:-1:xmax1+10
    if bw(i)>0
        if bw(i)<(bw(i+1)+bw(i+2)+bw(i+3)+bw(i+4))/4
            if bw(i)<(bw(i-1)+bw(i-2)+bw(i-3)+bw(i-4))/4
                if min2>=bw(i)
                    min2=bw(i);
                    xmin2=i;
                end
            end
        end
    end
end
%%%%%%%%%%%%%%%%%%
%max
xmax
%min1
xmin1
%max1
xmax1
%min2
xmin2
%max2
xmax2
%min
xmin

thres=(xmax1+xmax2)/2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x=1:1:256;
figure;
plot(x,bw,'-');
ylim([-200,1200]);
xlim([0,300]);
grid on
I1=im2bw(I,xmin1/255);
I2=im2bw(I,xmin2/255);
figure,subplot(1,2,1),imshow(I1);
subplot(1,2,2),imshow(I2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x1=xmin2;
x2=xmin;
y1=50;
y2=220;
mm=0;
for i=1:height
    for j=1:width
        mm=double(I(i,j));
        if mm<x1
            I(i,j)=fix(mm*y1/x1);
        elseif mm>x1 
                if mm<x2
                    I(i,j)=fix(y1+(mm-x1)*(y2-y1)/(x2-x1));
                elseif mm>x2
                    I(i,j)=fix(y2+(mm-x2)*(255-y2)/(255-x2));
                end
            end
        end
    end
end

bw=imhist(I);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5%
%消除直方图噪声
aw=bw;
bw=bw';
x=1:256;
for j=1:5
  for i=1:255
     if abs(bw(i)-bw(i+1))>1
         bw(i+1)=fix(bw(i)+bw(i+1))/2;
     end
  end
end
x=1:1:256;
figure;
plot(x,bw,'-');
ylim([-200,1200]);
xlim([0,300]);
grid on

figure,imshow(I);
I1=im2bw(I,xmin1/255);
I2=im2bw(I,xmin2/255);
figure,subplot(1,2,1),imshow(I1);
subplot(1,2,2),imshow(I2);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -