📄 huidulashen.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 + -