clear; close all hidden; load color_m; %load study result to matrix c pic_ori=imread('1.jpg','jpeg'); [m,n,z]=size(pic_ori); borderm=50;bordern=30; %cut the border to reduce the edge effect from the camera pic=pic_ori(borderm:m-borderm,bordern:n-bordern,:); [m,n,z]=size(pic); % dmin=10000;dmax=0; %not used yet pic_bi=ones(m,n); %to store binary image, 0 to be background for i=1:m for j=1:n v_rgb=double([pic(i,j,1) pic(i,j,2) pic(i,j,3)]); d=v_rgb*c*v_rgb'; % if ddmax % dmax=d; % end if d>300 %it is definitely not a pixel of the plate pic(i,j,1)=255; pic(i,j,2)=255; pic(i,j,3)=255; pic_bi(i,j)=0; end end end pic_gray=rgb2gray(pic); pic_gray1=pic_gray; [pic_bi labeln]=bwlabel(pic_bi,8); %get connected areas %throw away connected areas with pixels less than min_count count=zeros(1,labeln); for i=1:m for j=1:n pix=pic_bi(i,j); if pix ~= 0 count(pix)=count(pix)+1; end end end min_count=150; for i=1:labeln if count(i) 400 bottom=j; break; end end for i=m-bottom+1:m-1 j=m-i+1; if z(j-1)-z(j) < 400 && z(j) < 3000 top=j; break; end end plot(z,1:m); hold on; plot(1:max(z),top*ones(max(z),1),'r-'); plot(1:max(z),bottom*ones(max(z),1),'r-'); hold off; %locate the plate in horizontal direction pic1_gray=pic_gray(top:bottom,:); imview(pic1_gray); [m n]=size(pic1_gray); w=zeros(1,n); for j=1:n for i=1:m w(j)=w(j)+double(pic1_gray(i,j)); end end maxw=max(w); for j=1:n w(j)=maxw-w(j); end w=smooth(w,10); for j=1:n-1 i=n-j+1; if w(i-1)-w(i) > 200 right=i; break; end end for j=n-right+1:n-1 i=n-j+1; if w(i-1)-w(i) < 200 && w(i) < 300 left=i; break; end end figure,plot(w); hold on; plot(right*ones(max(w),1),1:max(w),'r-'); plot(left*ones(max(w),1),1:max(w),'r-'); hold off; pic2_gray=pic1_gray(:,left:right); imview(pic2_gray); save plate_region pic2_gray;