![]() |
车型识别---特征提取程序出错
差运算:
b=imread('f:tuxiang\kechebeijing.jpg');%//读取背景图像 c=imread('f:tuxiang\keche.jpg'); % //读取车辆图像 D=imsubtract(b,c); %//进行差运算,D为输出结果 imshow(D) %//显示图像 %中值滤波: [m,n] = size(D); %//或取待处理图像的大小 k = floor(7/2); A2 = zeros(m+2*k,n+2*k); A2(k+1:m+k,k+1:n+k) = D; % //把原始的图像放在中心位置 %//延伸边界的映像点,下面是4个角落的延伸 A2(1:k,1:k) = D(1,1); %//左上 A2(1:k,n+k+1:n+2*k) = D(1,n); %//右上 A2(m+k+1:m+2*k,n+k+1:n+2*k) = D(m,n); %//右下 A2(m+k+1:m+2*k,1:k) = D(m,1); %//左下 %//处理边,需要对行和列进行复制 for i = 1:k A2(i,k+1:n+k) =D(1,1:n); % //上部 A2(k+1:m+k,n+k+i) = D(1:m,n);% //右侧 A2(m+k+i,k+1:n+k) = D(m,1:n); %//下部 A2(k+1:m+k,i) = D(1:m,1); %//左侧 end; B=zeros(m,n); pixel_block = zeros(1,7^2);% //确定映像点块 for i = 1:m for j = 1:n k = floor(7/2); pixel_block = reshape(A2(i:i+2*k,j:j+2*k),7^2,1); sorted_block = sort(pixel_block);% //按升序排列 median_position = ceil(7^2 / 2); block_median = sorted_block (median_position); %//取中间位置的像素值 B(i,j) = block_median; end; end; B=uint8(B); %//转化成8位存储方式 imshow(B); %边缘检测: C=zeros(m,n); %//将B的象素左移一列,B为滤波后的图像 for i = 1:m for j = 1:(n-1) C(i,j)=B(i,j+1); end; end; %//右侧边界补零 for i = 1:m C(i,n)=0; end; C = uint8(C); CC=imsubtract(C,B); %//差运算 imshow(CC); %//阈值分割 T=10; for i = 1:m for j = 1:n if CC(i,j)>T CC(i,j)=255; else CC(i,j)=0; end; end; end; DD=imsubtract(B,C); for i = 1:m for j = 1:n if DD(i,j)>T DD(i,j)=255; else DD(i,j)=0; end; end; end; I=imadd(CC,DD);%//求和,横向的边缘检测结果和一个矩阵里 %//把原图向上偏移一行 E=zeros(m,n); for i = 1:(m-1) for j = 1:n E(i,j)=B(i+1,j); end; end; %//底部边界补零 for j = 1:n E(m,j)=0; end; E = uint8(E); EE=imsubtract(E,B); for i = 1:m for j = 1:n %//阈值分割 if EE(i,j)>T EE(i,j)=255; else EE(i,j)=0; end; end; end; FF=imsubtract(B,E); %//阈值分割 for i = 1:m for j = 1:n if FF(i,j)>T FF(i,j)=255; else FF(i,j)=0; end; end; end; J=imadd(EE,FF);%//纵向的边缘检测和一个矩阵里 P=imadd(I,J);%//求出车辆整个边缘检测线 figure,imshow(P); %边缘细化: [m,n]=size(P); W=zeros(m,n); for i=2:m-1 for j=2:n-1 count2=0;count3=0;count4=0;count5=0;count6=0;count7=0;count8=0;count9=0; p1=P(i,j);p2=P(i-1,j);p3=P(i-1,j+1);p4=P(i,j+1);p5=P(i+1,j+1);p6=P(i+1,j); p7=P(i+1,j-1);p8=P(i,j-1);p9=P(i-1,j-1); if p1==255 % //这里背景图像点标记为255 if p2==255 count2=1; else count2=0; end; if p3==255 count3=1; else count3=0; end; if p4==255 count4=1; else count4=0; end; if p5==255 count5=1; else count5=0; end; if p6==255 count6=1; else count6=0; end; if p7==255 count7=1; else count7=0; end; if p8==255 count8=1; else count8=0; end; if p9==255 count9=1; else count9=0; end; else W(i,j)=P(i,j); end; count=count2+count3+count4+count5+count6+count7+count8+count9;%//求N(p1) if count<2|count>6%//条件(1.1) W(i,j)=P(i,j); else Q(1:8)=[p2,p3,p4,p5,p6,p7,p8,p9]; a=0; for k=1:7 if Q(k)<Q(k+1) a=a+1; end; end; %//求S(p1) if a~=1 %//条件(1.2) W(i,j)=P(i,j); else if p2*p4*p6~=0|p4*p6*p8~=0%//条件(1.3)与(1.4) W(i,j)=P(i,j); else W(i,j)=0; end; end; end; end; end; %//步骤2 [m,n]=size(W); R=zeros(m,n); for i=2:m-1 for j=2:n-1 p1=W(i,j);p2=W(i-1,j);p3=W(i-1,j+1);p4=W(i,j+1);p5=W(i+1,j+1); p6=W(i+1,j);p7=W(i+1,j-1);p8=W(i,j-1);p9=W(i-1,j-1); if p1==255 if p2==255 count2=1; else count2=0; end; if p3==255 count3=1; else count3=0; end; if p4==255 count4=1; else count4=0; end; if p5==255 count5=1; else count5=0; end; if p6==255 count6=1; else count6=0; end; if p7==255 count7=1; else count7=0; end; if p8==255 count8=1; else count8=0; end; if p9==255 count9=1; else count9=0; end; else R(i,j)=W(i,j); end; count=count2+count3+count4+count5+count6+count7+count8+count9; if count<2|count>6 R(i,j)=W(i,j); else Q(1:8)=[p2,p3,p4,p5,p6,p7,p8,p9]; a=0; for k=1:7 if Q(k)<Q(k+1) a=a+1; end; end; if a~=1 R(i,j)=W(i,j); else if p2*p4*p8~=0|p2*p6*p8~=0 R(i,j)=W(i,j); else R(i,j)=0; end; end; end; end; end; %图像填充: [m,n]=size(R); U=zeros(m,n); for i=1:m for j=1:n x1=1;y1=1; if R(i,j)==255 U(i,j)=R(i,j); x1=j; break; end; end; for j=n:-1:1 if R(i,j)==255 U(i,j)=R(i,j); y1=j; break; end; end; for j=x1:y1 if x1~=1&y1~=x1 U(i,j)=255; end; end; end; for j=1:n for i=1:m x2=1;y2=1; if R(i,j)==255 U(i,j)=R(i,j); x2=i; break; end; end; for i=m:-1:1 if R(i,j)==255 U(i,j)=R(i,j); y2=i; break; end; end; for i=x2:y2 if x2~=1&y2~=x2 U(i,j)=255; end; end; end; %轮廓线的提取: [m,n]=size(U); %// U为上一步图像U滤波的结果 yy=zeros(m,n); for i=1:m for j=1:n if U(i,j)==255 yy(i,j)=U(i,j); break; end; end; end; for i=1:m for j=n:-1:1 if U(i,j)==255 yy(i,j)=U(i,j); break; end; end; end; for j=1:n for i=1:m if U(i,j)==255 yy(i,j)=U(i,j); break; end; end; end; for j=1:n for i=m:-1:1 if U(i,j)==255 yy(i,j)=U(i,j); break; end; end; end; figure,imshow(yy); %特征提取: [m,n]=size(yy); ZZ=zeros(m,n); for i=1:m for j=1:n if ZZ(i,j)==255 ZD=i; break; end; end; end; for i=m:-1:1 for j=1:n if ZZ(i,j)==255 ZG=i; break; end; end; end; jiahigh=ZD-ZG t=ceil(0.24*jiahigh); u=ceil(t/6); W=zeros(1,t+t+1); for i=ZG-t:ZG+t P=0; for i0=i-u:i+u for j0=1:n if ZZ(i0,j0)==255 P=P+1; break; end; end; end; W(i-ZG+t+1)=P; end; Y=max(W); for i=1:t+t+1 if W(i)==Y U=i; break; end; end; for i=ZG+U-t+u-1:-1:ZG+U-t-u-1 for j=1:n if ZZ(i,j)==255 ZG1=i; break; end; end; end; high=ZD-ZG1 for j=1:n for i=ZG+U-t-u-1:ZG+U-t+u-1 if ZZ(i,j)==255 DZY=j; break; end; end; end; DZY for j=n:-1:1 for i=ZG+U-t-u-1:ZG+U-t+u-1 if ZZ(i,j)==255 DZZ=j; break; end; end; end; DZZ for j=1:n for i=1:(ZD-high/3) if ZZ(i,j)==255 ZY=j; break; end; end; end; for j=n:-1:1 for i=1:(ZD-high/3) if ZZ(i,j)==255 ZZ1=j; break; end; end; end; length=ZY-ZZ1 Dlength=DZY-DZZ QHB=(((DZZ+DZY)/2)-ZZ1)/(ZY-((DZZ+DZY)/2)) DCB=Dlength/length DGB=DZY-DZZ/ZD-ZG1??? Undefined function or variable "ZD". [COLOR="red"][COLOR="red"][COLOR="red"][COLOR="Red"]Error in ==> Untitled at 345 jiahigh=ZD-ZG[/COLOR][/COLOR][/COLOR][/COLOR] 哪位哥哥姐姐帮% 帮我啊,看看问题在哪儿 |
回复: 车型识别---特征提取程序出错
大哥,你把格式弄好点儿,看着累眼啊!
|
所有时间均为北京时间。现在的时间是 11:27。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.