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

📄 s3p.m

📁 利用sobel算子和霍夫变换求出图像的边缘
💻 M
字号:
%============================================s3p.m=============================================
%Step3:对二值图像进行霍夫变换
%Mmax和Nmax分别为离散化的分割数,这里设置为1000
Mmax = 500;
Nmax = 500;

H = zeros(Mmax,Nmax);               %初始化霍夫数组
L = size(P);                        %获得二值图像的大小

%霍夫变换,对每个值为1的像素点进行遍历,并累加到霍夫数组中
for i = 3:L(1)-2,
    for j = 3:L(2)-2,
        if P(i,j) == 1,
            for n = 1:Nmax,
                th = pi*(n - 1)/(Nmax - 1)/2;   %得到n表示的θ值
                r = j*cos(th) + i*sin(th);      %得到θ对应的ρ值
                m = (Mmax - 1)*r/3000 + 1;      %得到ρ值对应的离散数
                m = round(m);
                H(m,n) = H(m,n) + 1;            %霍夫数组加一
            end
        end
    end
end

%求出霍夫数组中最大的和第三大的数据
i1=1;
j1=1;
i2=1;
j2=1;
L = size(H);
for i = 1:L(1),
    for j = 1:L(2),
        if H(i,j)>H(i1,j1),
            j3 = j2;
            i3 = i2;
            i2 = i1;
            j2 = j1;
            i1 = i;
            j1 = j;
        end
    end
end

L = size(I);                                    %获得原图像的大小
x = 1:L(2)+2;                                   %x的取值范围是1~L(2)+2

%求出两个边缘直线的参数
th1 = pi*(j1 - 1)/(Nmax - 1)/2;
th2 = pi*(j3 - 1)/(Nmax - 1)/2;
r1 = 3000*(i1 -1)/(Mmax - 1);
r2 = 3000*(i3 -1)/(Mmax - 1);
y1 = round((r1 - x*cos(th1))/sin(th1));
y2 = round((r2 - x*cos(th2))/sin(th2));

%为了使直线在图像中比较明显,使用红色,并且厚度取3个像素
for i = 2:L(2)+1,
    I(y1(i)-1,i-1,1) = 255;
    I(y1(i)-1,i-1,2) = 0;
    I(y1(i)-1,i-1,3) = 0;
    I(y1(i),i-1,1) = 255;
    I(y1(i),i-1,2) = 0;
    I(y1(i),i-1,3) = 0;
    I(y1(i)+1,i-1,1) = 255;
    I(y1(i)+1,i-1,2) = 0;
    I(y1(i)+1,i-1,3) = 0;
    I(y2(i)-1,i-1,1) = 255;
    I(y2(i)-1,i-1,2) = 0;
    I(y2(i)-1,i-1,3) = 0;
    I(y2(i),i-1,1) = 255;
    I(y2(i),i-1,2) = 0;
    I(y2(i),i-1,3) = 0;
    I(y2(i)+1,i-1,1) = 255;
    I(y2(i)+1,i-1,2) = 0;
    I(y2(i)+1,i-1,3) = 0;
end
imwrite(I,'pipe_out.jpg','jpg');                %将处理出来的图像输出到pipe_out.jpg中
%=========================================s3p.m(end)==========================================

⌨️ 快捷键说明

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