资源简介
简单的路面裂缝识别,基于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
- 上一篇:三维粗糙表面程序
- 下一篇:LLC闭环谐振模型simuli
nk
评论
共有 条评论