⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch7_2_3.m

📁 常用图像处理源码合集
💻 M
字号:
%%%%%%5相位编组法实现纹理直线边缘的检测程序代码(代码以子函数形式给出)
function gradephase(x)
[m,n]=size(x);
bw=edge(x,'sobel');
gy=x(1:m-1,1:n-1)-x(2:m,1:n-1);
gx= x(1:m-1,1:n-1)-x(1:m-1,2:n);
g=gy./(gx+eps);
ph-atan(g)+(sign(gx)<0&sign(gy)>0)*pi+...
    (sign(gx)<0&sign(gy)>0)+ (sign(gx)>0&sign(gy)<0)*2*pi+(sign(gx)==0)*pi;
grdgp=floor(ph/pi*4);
cn=0;s=[ ];
In_spt=cell(1,1);
% cell数组类似c语言的指针,可以动态改变大小。S用来存放直线编组区域内的像%素坐标。
pline=[];
for  i=2:m-1
    for  j=2:n-1
        if  bw(i,j)==D&gradgp(i,j)==0 %搜索边缘点。
            ph_cp=gradgp(i,j);gradgp(i,j)=0;bw(i,j)=0;
            cn=cn+1;p=[i,j];
            s=[s,p];in_spt(cn)-[p];
            while ~isempty(s) %为了在8个邻域进行搜索,采用入栈和出栈操作。
                [cs,rs]=size(s);
                ps=s(:,rs);s=s(:,1:rs-1);
                col=ps(1,1);row=ps(2,1);
                if  legal(col+1,row,m,n)&grdgp(col+1,row)=ph_cp
                    s= [s,[col+1,row]’]; in_spt(cn)=[ in_spt(cn), [col+1,row]’];
                    bw(col+1,row)=0;gradgp(col+1,row)=0;
                end
                if  legal(col+1,row+1,m,n)&grdgp(col+1,row+1)=ph_cp
                    s= [s,[col+1,row+1]’]; in_spt(cn)=[ in_spt(cn), [col+1,row+1]’];
                    bw(col+1,row+1)=0;gradgp(col+1,row+1)=0;
                end
                if  legal(col,row+1,m,n)&grdgp(col,row+1)=ph_cp
                    s= [s,[col,row+1]’]; in_spt(cn)=[ in_spt(cn), [col,row+1]’];
                    bw(col,row+1)=0;gradgp(col,row+1)=0;
                end
                if  legal(col-1,row+1,m,n)&grdgp(col-1,row+1)=ph_cp
                    s= [s,[col-1,row+1]’]; in_spt(cn)=[ in_spt(cn), [col-1,row+1]’];
                    bw(col-1,row+1)=0;gradgp(col-1,row+1)=0;
                end
                if  legal(col-1,row+1,m,n)&grdgp(col-1,row+1)=ph_cp
                    s= [s,[col-1,row+1]’]; in_spt(cn)=[ in_spt(cn), [col-1,row+1]’];
                    bw(col-1,row+1)=0;gradgp(col-1,row+1)=0;
                end
                if  legal(col-1,row,m,n)&grdgp(col-1,row)=ph_cp
                    s= [s,[col-1,row]’]; in_spt(cn)=[ in_spt(cn), [col-1,row]’];
                    bw(col-1,row)=0;gradgp(col-1,row)=0;
                end
                if  legal(col,row-1,m,n)&grdgp(col,row-1)=ph_cp
                    s= [s,[col,row-1]’]; in_spt(cn)=[ in_spt(cn), [col,row-1]’];
                    bw(col,row-1)=0;gradgp(col,row-1)=0;
                end
                if  legal(col-1,row-1,m,n)&grdgp(col-1,row-1)=ph_cp
                    s= [s,[col+1,row-1]’]; in_spt(cn)=[ in_spt(cn), [col+1,row-1]’];
                    bw(col+1,row-1)=0;gradgp(col+1,row-1)=0;
                end
                %以上判断是在8个方向搜索相同方向的象素。
                If   length(in_spt{cn})<=10
                In_spt{cn}=[];
                cn=cn-1;
                %虑除短线段
                else
                    plane=draw_1(in_spt{cn});
                    %实现画线功能,代码与Hough变换中的代码相同。
                    pline=[pline,plne];
                    c(i)=length(in_spt{cn});
            end
        end
    end
end
end

⌨️ 快捷键说明

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