📄 testg.m
字号:
close all;
clear;
%A2=imread('D:\a实验用\nh1.bmp','bmp');
%figure(9),imshow(A2);
A1=imread('yn.bmp');%%%% w1 qw l2 qq yn h2
A=rgb2gray(A1);
%imwrite(A,'ynh.bmp');
k=25;
hui=0;
tic;
figure(1),imshow(A);
[m,n]=size(A);
for i=2:(m-1)
for j=2:(n-1)
hui=hui+double(A(i,j));
end
end
G=[0;-2;2;0];
H=[0.125;0.375;0.375;0.125];
%[A]=filtimag1231(A1);
%[cc]=fenggfuc(A);
%imwrite(cc,'qqying.bmp');figure(3),imshow(cc);
%Ac2=edge(A,'prewitt');
%figure(15),imshow(Ac2);
%G1=[0;0;-2;0;2;0;0;0];
%H1=[0.125;0;0.375;0;0.375;0;0.125;0];
%G=[0.025;0.475;0.475;0.025];
%H=[0.025;0.475;0.475;0.025];
huit=round(hui/(m*n));
%aaa=[huit,huit/2,huit,huit/2];
%ss=aaa*G;
%ss2=aaa*H;
%%%%边缘扩展
Ak=zeros(m+k,n+k);
for i=1:(m+k)
for j=1:(n+k)
Ak(i,j)=huit;
end
end
for i=6:(m+6-1)
for j=6:(n+6-1)
Ak(i,j)=A(i-5,j-5);
end
end
%%%对行进行1变换
[SSh,WWh]=hanb(Ak);%%%%hanb及hanb2为函数
%%%对行进行2变换
[SSh2,WWh2]=hanb2(SSh);
%%%对行进行2变换[SSh3,WWh3]=hanb3(SSh2);
%%%对列进行1变换%%%%lieb及lieb2为函数[SSl,WWl]=lieb(Ak);
%%%对列进行2变换[SSl2,WWl2]=lieb2(SSl);
%%%对列进行2变换[SSl3,WWl3]=lieb3(SSl2);
%%对行进行寻找变换后的最大值点c5=WWh3; [ahmax3]=findmaxminh(c5);
c1=WWh;
[ahmax1]=findmaxminh(c1);
c3=WWh2;
[ahmax2]=findmaxminh(c3);
%%寻找1列变换后的最大值点
% c2=WWl;
% [almax1]=findmaxminl(c2);
% c4=WWl2;
% [almax2]=findmaxminl(c4);
%%%%%%%%%%%%%%%mm=1; c6=WWl3; [almax3]=findmaxminl(c6);
hmax2=ahmax2;
hmax22=ahmax2;
hmax1=ahmax1;
M=huit/4;
N=huit/4;
%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%
%figure(2),imshow(ccall11);
%%%%%%%%%%%%%%%figure(4),imshow(hmax2);
%%% 统计行或列的不为零的边缘点,若不为零则记录其点值并存于Amh中
[mch2,nch2]=size(hmax2);
for i=6:(m+5)
ererhm=0;
ehm=0;
for j=6:(n+5)
if (abs(hmax2(i,j))>0)
ererhm=ererhm+abs(hmax2(i,j));
ehm=ehm+1;
end
end
if ehm>0
km=ererhm/ehm;
Amh(1,i)=km;
else
Amh(1,i)=0;
end
end
sum=0;
k2=0;
for i=6:(m+5)
elm=0;
km=0;
ererm=0;
for j=6:(n+5)
if (abs(hmax2(i,j))>=(Amh(1,i)*4)/16)
elm=elm+1;
ererm=ererm+double(A(i-5,j-5));
else
hmax2(i,j)=0;
end
end
Amhers(1,i)=elm;
if elm>15
km=ererm/elm;
Amher(1,i)=round(km);
else
Amher(1,i)=0;
end
end
Cc=A;
%et11=erer11/el11;
for i=1:m
for j=1:n
if ((Cc(i,j)>(165*Amher(1,i+5))/160)&&Amher(1,i+5)>0);
Cc(i,j)=255;
elseif Amher(1,i+5)==0&&Cc(i,j)>=0
Cc(i,j)=255;
else Cc(i,j)=0;
end
end
end
%imwrite(Cc,'qqer.bmp');
figure(10),imshow(Cc);
cout=0;
cout2=0;
for i=1:(m)
for j=1:(n)
if Cc(i,j)>0
cout=cout+1;
else
cout2=cout2+1;
end
end
end
if cout>cout2
bkg=255;
else
bkg=0;
end
cc=Cc;
t1=0;
if bkg==0
for t1=1:4
for i=2:(m-1)
for j=2:(n-1)
cout=0;
for pp=-1:1
for qq=-1:1
if Cc(i+pp,j+qq)>bkg
cout=cout+1;
end
end
end
if cout<4;
cc(i,j)=bkg;
end
end
end
Cc=cc;
end
else
for t1=1:4
for i=2:(m-1)
for j=2:(n-1)
cout=0;
for pp=-1:1
for qq=-1:1
if Cc(i+pp,j+qq)<bkg
cout=cout+1;
end
end
end
if cout<4;
cc(i,j)=bkg;
end
end
end
Cc=cc;
end
end
% figure(11),imshow(Cc);
asum=0;k3=0;
for i=1:m
sum=0;
for j=1:n-1
if Cc(i,j)==Cc(i,j+1)
flag=0;
else
sum=sum+1;
end
end
if sum>0&&(i>(m/4)||i<(3*m/4))
asum=sum+asum;
k3=k3+1;
end
Amhers2(1,i)=sum;
end
t3=round(asum/k3);
tb=round(t3*7/10);%%%%%设置跳变点的个数值!!!!!
max1=0;
for i=1:round(m/4)
if Amhers2(1,i)==0
max1=i;
break;
elseif Amhers2(1,i)<tb||Amhers2(1,i)>30
max1=i;
end
end
max2=0;
for i=m:-1:(round(6*m/8))
if Amhers2(1,i)<tb||Amhers2(1,i)>30
max2=i;
end
end
for i=1:m
if i<=max1||i>=max2
for j=1:n
Cc(i,j)=bkg;
end
end
end
% figure(8),imshow(Cc);
cc=Cc;
t1=0;
if bkg==0
for t1=1:6
for i=2:(m-1)
for j=2:(n-1)
cout=0;
for pp=-1:1
for qq=-1:1
if Cc(i+pp,j+qq)>bkg
cout=cout+1;
end
end
end
if cout<4;
cc(i,j)=bkg;
end
end
end
Cc=cc;
end
else
for t1=1:6
for i=2:(m-1)
for j=2:(n-1)
cout=0;
for pp=-1:1
for qq=-1:1
if Cc(i+pp,j+qq)<bkg
cout=cout+1;
end
end
end
if cout<4;
cc(i,j)=bkg;
end
end
end
Cc=cc;
end
end
%figure(13),imshow(Cc);
kkkk1=1;k2=round(n/16);k3=round(n*15/16);kkkk2=n;
for j=k2:-1:1
sum=0;
for i=max1:max2
if Cc(i,j)==Cc(i+1,j)
flag=0;
else
sum=sum+1;
end
end
if sum==0;
kkkk1=j;
break;
end
end
for j=1:kkkk1
for i=max1:max2
Cc(i,j)=bkg;
end
end
for j=k3:1:n
sum=0;
for i=max1:max2
if Cc(i,j)==Cc(i+1,j)
flag=0;
else
sum=sum+1;
end
end
if sum==0;
kkkk2=j;
break;
end
end
for j=n:-1:kkkk2
for i=max1:max2
Cc(i,j)=bkg;
end
end
%cc2=erode(Cc,[0,1,1,0;0,1,1,0]);cc3=erode(cc2,[0 0 0;0 1 0;0 0 0]);figure(12),imshow(Cc);
%imwrite(C,'dk.bmp');Amhers2
% imwrite(Cc,'qqo.bmp');
figure(14),imshow(Cc);
toc;
%figure(14),imshow(cc3);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -