p0805.m

来自「《visual c++matlab图像处理与识别实用案例精选》源码」· M 代码 · 共 59 行

M
59
字号
I=imread('brand02.jpg');
HS_I=double(I);
tic
G=gradient(HS_I);  % 计算梯度值
[y,x]=size(I);
T=60;
%%%%%%% 商标文字分割 %%%%%%%%%%
n=30;
GY=zeros(y,1);                 
for j=1:y   
    for i=1:x-n
         Max=max(G(j,i:i+n));
         Min=min(G(j,i:i+n));
         MGD(j,i)=Max-Min;       % 计算最大梯度差
         if (MGD(j,i)>T)         
             GY(j,1)=GY(j,1)+1;  % MGD大于阈值的次数统计
         end    
    end
end    
[temp MaxY]=max(GY);
PY1=MaxY;
while ((GY(PY1,1)>=n)&&(PY1>1))  % 次数阈值检测
       PY1=PY1-1;
end    
PY2=MaxY;
while ((GY(PY2,1)>=n)&&(PY2<y))
       PY2=PY2+1;
end
%%%%%%%%%% X 方向的分割 %%%%%%%%%%%
n=15;
GX=zeros(1,x);
for i=1:x
    for j=1:y-n
         Max=max(G(j:j+n,i));
         Min=min(G(j:j+n,i));
         MGD(j,i)=Max-Min;
         if (MGD(j,i)>T)
             GX(1,i)=GX(1,i)+1;
         end
     end
 end
 PX1=1;
while (((GX(1,PX1)<=n)||(GX(1,PX1+1)<=n))&&(PX1<x)) % 列方向保证同时相邻的两列满足次数要求
       PX1=PX1+1;
end    
PX2=x;
while (((GX(1,PX2)<=n)||(GX(1,PX2-1)<=n))&&(PX2>PX1))
       PX2=PX2-1;
end    

HS_I=uint8(HS_I);
IY=HS_I(PY1:PY2,PX1:PX2);
t=toc
%%%%%%%%%%%%%%%%%%%%%%%%%%
figure,imshow(HS_I);
figure,plot(MGD(40,:));grid
figure,plot(MGD(140,:));grid
figure,imshow(IY);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?