clc
clear all
close all
originI=imread('H:\我的毕业设计\算法\qwe.bmp');
[m,n,s] = size(originI);
I=originI;
if s == 3
I = rgb2gray(originI);
end
I=double(I);
figure, imshow(uint8(I)) ;
title('原图像');
tic
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 归一化
M=150;var=200;
M1=mean2(I);
var1=std2(I);
% for x=1:m
% for y=1:n
% M=M+I(x,y);
% end
% end
% M1=M/(m*n);
% for x=1:m
% for y=1:n
% var=var+(I(x,y)-M1)*(I(x,y)-M1);
% end
% end
% var1=var/(m*n);
%c=sqrt(30*(I(x,y)-M1)/var1);
for x=1:m
for y=1:n
if I(x,y)>=M1
I(x,y)=M+sqrt(var*(I(x,y)-M1)/var1);
else
I(x,y)=M-sqrt(var*(M1-I(x,y))/var1);
end
end
end
figure, imshow(uint8(I));
title('归一化之后的图');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 分割
M = 10; %1
H = m/M; L= n/M;
aveg1=zeros(H,L);
var1=zeros(H,L);
for x=1:H;
for y=1:L;
aveg=0;var=0;
for i=1:M;
for j=1:M;
aveg=I(i+(x-1)*M,j+(y-1)*M)+aveg;
end
end
aveg1(x,y)=aveg/(M*M);
for i=1:M;
for j=1:M;
var=(I(i+(x-1)*M,j+(y-1)*M)-aveg1(x,y))*(I(i+(x-1)*M,j+(y-1)*M)-aveg1(x,y))+var;
end
end
var1(x,y)=var/(M*M);
end
end
Gmean=0;Vmean=0;
for x=1:H
for y=1:L
Gmean=Gmean+aveg1(x,y);
Vmean=Vmean+var1(x,y);
end
end
Gmean1=Gmean/(H*L);
Vmean1=Vmean/(H*L);
gtemp=0;gtotle=0;vtotle=0;vtemp=0;
for x=1:H
for y=1:L
if Gmean1>aveg1(x,y)
gtemp=gtemp+1;
gtotle=gtotle+aveg1(x,y);
end
if Vmean1<var1(x,y)
vtemp=vtemp+1;
vtotle=vtotle+var1(x,y);
end
end
end
G1=gtotle/gtemp;V1=vtotle/vtemp;
gtemp1=0;gtotle1=0;vtotle1=0;vtemp1=0;
for x=1:H
for y=1:L
if G1<aveg1(x,y)
gtemp1=gtemp1+1;
gtotle1=gtotle1+aveg1(x,y);
end
if 0<var1(x,y)<V1
vtemp1=vtemp1+1;
vtotle1=vtotle1+var1(x,y);
end
end
end
G2=gtotle1/gtemp1;V2=vtotle1/vtemp1;
moban=zeros(H,L);
T1=G2;T2=V2;
T3=G1-100;T4=V2-10;
for x=1:H
for y=1:L
if aveg1(x,y)>T1 && var1(x,y)<T2
moban(x,y)=1;
end
if aveg1(x,y)<T3 && var1(x,y)<T2
moban(x,y)=1;
end
end
end
for x=2:H-1
for y=2:L-1
if moban(x,y)==1
if moban(x-1,y) + moban(x-1,y+1) +moban(x,y+1) + moban(x+1,y+1) + moban(x+1,y) + moban(x+1,y-1) + moban(x,y-1) + moban(x-1,y-1) <=4
moban(x,y)=0;
end
end
end
end %2
Icc = ones(m,n);
for x=1:H
for y=1:L
if moban(x,y)==1
for i=1:M
for j=1:M
I(i+(x-1)*M,j+(y-1)*M)=G1;
Icc(i+(x-1)*M,j+(y-1)*M)=0;
end
end
end
end
end
figure, imshow(uint8(I));
title('分割图');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%二值化
Im=uint8(I);
In=medfilt2(Im);
figure,imshow(Im);
title('增强图');
In=double(In);
% temp=(1/9)*[1 1 1;1 1 1;1 1 1];%模版系数 %3
% Im=double(I);
% In=zeros(m,n);
% for a=2:m-1;
% for b=2:n-1;
% In(a,b)=Im(a-1,b-1)*temp(1,1)+Im(a-1,b)*temp(1,2)+Im(a-1,b+1)*temp(1,3)+Im(a,b-1)*temp(2,1)+Im(a,b)*temp(2,2)+Im(a,b+1)*temp(2,3)+Im(a+1,b-1)*temp(3,1)+Im(a+1,b)*temp(3,2)+Im(a+1,b+1)*temp(3,3);
% end
% end
I=In;
%figure,imshow(unit8(I));
% title('滤波');
Im=zeros(m,n);
for x=5:m-5;
for y=5:n-5;
sum1=I(x,y-4)+I(x,y-2)+I(x,y+2)+I(x,y+4);
sum2=I(x-2,y+4)+I(x-1,y+2)+I(x+1,y-2)+I(x+2,y-4);
sum3=I(x-2,y+2)+I(x-4,y+4)+I(x+2,y-2)+I(x+4,y-4);
sum4=I(x-2,y+1)+I(x-4,y+2)+I(x+2,y-1)+I(x+4,y-2);
sum5=I(x-2,y)+I(x-4,y)+I(x+2,y)+I(x+4,y);
sum6=I(x-4,y-2)+I(x-2,y-1)+I(x+2,y+1)+I(x+4,y+2);
sum7=I(x-4,y-4)+I(x-2,y-2)+I(x+2,y+2)+I(x+4,y+4);
sum8=I(x-2,y-4)+I(x-1,y-2)+I(x+1,y+2)+I(x+2,y+4);
sumi=[sum1,sum2,sum3,sum4,sum5,sum6,sum7,sum8];
summax=max(sumi);
summin=min(sumi);
summ=sum(sumi);
b=summ/8;
if (summax+summin+ 4*I(x,y))> (3*(sum1+sum2+sum3+sum4+sum5+sum6+sum7+sum8)/8)
sumf = summin;
else
sumf = summax;
end
if sumf > b
Im(x,y)=128;
else
Im(x,y)=255;
end
end
end
for i=1:m
for j =1:n
Icc(i,j)=Icc(i,j)*Im(i,j);
end
end
for i=1:m
for j =1:n
if (Icc(i,j)==128)
Icc(i,j)=0;
else
Icc(i,j)=1;
end;
end
end
figure,imshow(double(Icc));
title('二值化图');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%二值化后处理
Im=Icc;
In=Im;
for a=1:4
for i=2:m-1
for j=2:n-1
if Im(i,j)==1
if Im(i-1,j) + Im(i-1,j+1) +Im(i,j+1) + Im(i+1,j+1) + Im(i+1,j) + Im(i+1,j-1) + Im(i,j-1) + Im(i-1,j-1) <=3
In(i,j)=0;
end
end
if Im(i,j)==0
if Im(i-1,j) + Im(i-1,j+1) +Im(i,j+1) + Im(i+1,j+1) + Im(i+1,j) + Im(i+1,j-1) + Im(i,j-1) + Im(i-1,j-1) >=7
In(i,j)=1;
end
end
end
end
Im=In;
end
figure,imshow(double(In));
title('二值化后处理图');
for i=2:m-1 %反向
for j=2:n-1
if In(i,j)==1
In(i,j)=0;
else
In(i,j)=1;
end
end
end
%细化%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Im = imSkeleton_LLLL(In);
I=Im;
for nn = 1:8
for x=2:m-1
for y=2:n-1
if I(x,y) == 1
if I(x,y-1)==1 && I(x,y+1)==0 %a
if (I(x-1,y)==0 && I(x-1,y+1)==1)||(I(x+1,y)==0 && I(x+1,y+1)== 1)
I(x,y)=1;
end
end
if I(x-1,y)==0 && I(x+1,y)==1 %b
if (I(x-1,y-1) ==1 && I(x,y-1)==0)||( I(x-1,y+1)==1 &&I(x,y+1)==0 )
I(x,y)=1;
end
end
if I(x,y-1)==0 && I(x,y+1)==1 %c
if (I(x-1,y-1)==1 &&I(x-1,y)==0)||(I(x+1,y)==0 && I(x+1,y-1)== 1)
I(x,y)=1;
end
end
if I(x-1,y)==1 && I(x+1,y)==0 %d
if (I(x+1,y-1) ==1 && I(x,y-1)==0)||( I(x+1,y+1)==1 &&I(x,y+1)==0 )
I(x,y)=1;
%else I(x,y)=0;
end
end
else I(x,y)=0;
end
end
end
end
figure,imshow(I);
title('细化图');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%特征提取
xxx=0;
Im=I;
tezheng=zeros(m,n,3);
% pz=zeros(1,9);
for i=2:m-1
for j=2:n-1
if Im(i,j)==1
a = 0;
% b = 0;
% pz(1)=Im(i-1,j-1);
% pz(2)=Im(i,j-1);
% pz(3)=Im(i+1,j-1);
% pz(4)=Im(i+1,j);
% pz(5)=Im(i+1,j+1);
% pz(6)=Im(i,j+1);
% pz(7)=Im(i-1,j+1);
% pz(8)=Im(i-1,j);
% pz(9)=pz(1);
% for m=1:8
% a=a+abs(pz(m+1)-pz(m));
% b=b+pz(m);
% end
if Im(i-1,j) ~= Im(i-1,j+1)
a = a + 1;
end
if Im(i-1,j+1) ~= Im(i,j+1)
a = a + 1;
end
if Im(i,j+1) ~= Im(i+1,j+1)
a = a + 1;
end
if Im(i+1,j+1) ~= Im(i+1,j)
a = a + 1;
end
if Im(i+1,j) ~= Im(i+1,j-1)
a = a + 1;
end
if Im(i+1,j-1) ~= Im(i,j-1)
a = a + 1;
end
if Im(i,j-1) ~= Im(i-1,j-1)
a = a + 1;
end
if Im(i-1,j-1) ~= Im(i-1,j)
a = a + 1;
end
if a==6 %%%分叉点判断
tezheng(i,j,1)=i;
tezheng(i,j,2)=j;
- 1
- 2
前往页