• 大小: 55KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-04-10
  • 语言: Matlab
  • 标签:

资源简介

简单的路面裂缝识别,基于matlab

资源截图

代码片段和文件信息

I = imread(‘a.jpg‘);  
figureimshow(I[])  
title(‘原图‘)  
I = rgb2gray(I);
figureimshow(I[])  
title(‘灰度图‘)  
I = double(I);  
[heightwidth] = size(I);  
J = I;  

conv = zeros(55);%高斯卷积核  
sigma = 1;
sigma_2 = sigma * sigma;
sum = 0;  
for i = 1:5  
    for j = 1:5  
        conv(ij) = exp((-(i - 3) * (i - 3) - (j - 3) * (j - 3)) / (2 * sigma_2)) / (2 * 3.14 * sigma_2);%高斯公式  
        sum = sum + conv(ij);  
    end  
end  
conv = conv./sum;
  
%对图像实施高斯滤波  
for i = 1:height  
    for j = 1:width  
        sum = 0;
        for k = 1:5  
            for m = 1:5  
                if (i - 3 + k) > 0 && (i - 3 + k) <= height && (j - 3 + m) > 0 && (j - 3 + m) < width  
                    sum = sum + conv(km) * I(i - 3 + kj - 3 + m);  
                end  
            end  
        end  
        J(ij) = sum;  
    end  
end  
figureimshow(J[])  
title(‘高斯滤波后的结果‘)  
%求梯度  
dx = zeros(heightwidth);
dy = zeros(heightwidth);
d = zeros(heightwidth);  
%d = J;
for i = 1:height - 1  
    for j = 1:width - 1  
        dx(ij) = J(ij + 1) - J(ij);  
        dy(ij) = J(i + 1j) - J(ij);  
        d(ij) = sqrt(dx(ij) * dx(ij) + dy(ij) * dy(ij));  
    end  
end  
figureimshow(d[])  
title(‘求梯度后的结果‘)  
  
%局部非极大值抑制  
K = d;

for j = 1:width  
    K(1j) = 0;  
end  
for j = 1:width  
    K(heightj) = 0;  
end  
for i = 2:width - 1  
    K(i1) = 0;  
end  
for i = 2:width - 1  
    K(iwidth) = 0;  
end  
  
for i = 2:height - 1  
    for j = 2:width - 1  
        if d(ij) == 0  
            K(ij) = 0;  
        else  
            gradX = dx(ij);%当前点x方向导数  
            gradY = dy(ij);%当前点y方向导数  
            gradTemp = d(ij);%当前点梯度  
            %如果Y方向幅度值较大  
            if abs(gradY) > abs(gradX)  
                weight = abs(gradX) / abs(gradY);%权重  
                grad2 = d(i - 1j);  
                grad4 = d(i + 1j);  
                %如果x、y方向导数符号相同  
                %像素点位置关系  
                %g1 g2  
                %   C  
                %   g4 g3  
                if gradX * gradY > 0  
                    grad1 = d(i - 1j - 1);  
                    grad3 = d(i + 1j + 1);  
                else  
                    %如果x、y方向导数符号反  
                    %像素点位置关系  
                    %   g2 g1  
                    %   C  
                    %g3 g4  
                    grad1 = d(i - 1j + 1);  
                    grad3 = d(i + 1j - 1);  
                end  
            %如果X方向幅度值较大  
            else  
                weight = abs(gradY) / abs(gradX);%权重  
                grad2 = d(ij - 1);  
                grad4 = d(ij + 1);  
                %如果x、y方向导数符号相同  
                %像素点位置关系  
                %g3  
                %g4 C g2  
                %     g1  
                if gradX * gradY > 0  
                    grad1 = d(i + 1j + 1);  
                    grad3 = d(i - 1j - 1);  
         

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        7698  2014-12-11 10:21  canny.m
     文件       55444  2014-12-10 17:53  a.jpg

评论

共有 条评论

相关资源