gdqthresh.m

来自「采用matlab软件编写一种基于过渡区的图像分割方法」· M 代码 · 共 43 行

M
43
字号
tic;
f=imread('rice.tif');  %灰度图
% f=double(a);           %卷积运算不支持uint8类型??
TPh=zeros(1,256); %非零梯度象素的总数
TPl=zeros(1,256);
EAGhigh=zeros(1,256);%图像中非零梯度象素的平均梯度(有效平均梯度)
EAGlow=zeros(1,256);
h1=[-1 0 1;-2 0 2;-1 0 1];
h2=[1 2 1;0 0 0;-1 -2 -1];
fhigh=f;
flow=f;
for x=0:255;
 fhigh(f>=x)=x;        %高端剪切的梯度图
 flow(f<=x)=x;         %低端剪切的梯度图
 gh1=conv2(fhigh,h1,'valid');
 gh2=conv2(fhigh,h2,'valid');%不考虑边界补零,返回矩阵小于原矩阵
 gl1=conv2(flow,h1,'valid');
 gl2=conv2(flow,h2,'valid');
%  gh=sqrt((gh1.*gh1)+(gh2.*gh2));
%  gl=sqrt((gl1.*gl1)+(gl2.*gl2));
 gh=abs(gh1)+abs(gh2);   
 gl=abs(gl1)+abs(gl2);
 TGh(x+1)=sum(sum(gh));  %梯度图的总梯度值
 TGl(x+1)=sum(sum(gl));
 ph=(gh>0);
 pl=(gl>0);
 TPh(x+1)=sum(sum(ph));   %非零梯度象素的总数
 TPl(x+1)=sum(sum(pl));
 if  TPh(x+1)==0
        EAGhigh(x+1)=0;
    else
        EAGhigh(x+1)=TGh(x+1)/TPh(x+1);
    end
    if  TPl(x+1)==0;
        EAGlow(x+1)=0;
    else
        EAGlow(x+1)=TGl(x+1)/TPl(x+1);    %有效平均梯度
    end       
end
[EAGh,Lhigh]=max(EAGhigh);
[EAGl,Llow]=max(EAGlow);
Lhigh,Llow,
 toc  %19.478s

⌨️ 快捷键说明

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