diff_of_gauss matlab
时间: 2024-01-16 11:04:55 浏览: 28
以下是求解高斯差分的 Matlab 代码:
```matlab
function [G, x] = gauss(sigma, kernel_size)
% 构造高斯核
x = floor(kernel_size/2);
G = zeros(1, kernel_size);
for i = 1:kernel_size
G(i) = (1/(sqrt(2*pi)*sigma))*exp(-((i-x-1)^2)/(2*sigma^2));
end
end
function [DoG, x] = diff_of_gauss(sigma, kernel_size, k)
% sigma: 初始高斯核标准差
% kernel_size: 卷积核大小
% k: 高斯核标准差比例
% 构造两个高斯核
[G1, x] = gauss(sigma, kernel_size);
[G2, ~] = gauss(sigma*k, kernel_size);
% 计算高斯差分
DoG = G2 - G1;
% 归一化
DoG = DoG ./ sum(abs(DoG));
end
```
使用方法:
```matlab
sigma = 1;
kernel_size = 5;
k = 1.5;
[DoG, x] = diff_of_gauss(sigma, kernel_size, k);
```
其中 `DoG` 为求得的高斯差分核,`x` 为卷积核的中心位置。
使用高斯差分进行边缘检测的 Matlab 代码及结果展示:
```matlab
% 读入图像
img = imread('lena.jpg');
img = rgb2gray(img);
% 高斯差分参数
sigma = 1;
kernel_size = 5;
k = 1.5;
% 计算高斯差分
[DoG, x] = diff_of_gauss(sigma, kernel_size, k);
% 对图像进行卷积
img_diff = conv2(img, DoG, 'same');
% 展示结果
figure;
subplot(1,2,1);
imshow(img);
title('原图');
subplot(1,2,2);
imshow(abs(img_diff), []);
title('高斯差分边缘检测');
```
结果展示:
![高斯差分边缘检测结果](https://img-blog.csdn.net/20180908104045112?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3l1YW5fZmFfYmlsbGlvbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/70)