SUSAN角点检测matlab
时间: 2023-11-04 09:54:23 浏览: 125
SUSAN角点检测是一种高效的边缘和角点检测算法,全名为Smallest Univalue Segment Assimilating Nucleus。它具有特色的结构保留降噪功能。SUSAN算子不仅可以检测图像目标的边界点,还能较为鲁棒地检测目标的角点。通过对圆形模板的SUSAN值进行分析,当模板的中心位于角点处时,SUSAN值最小。
若您想了解更多关于SUSAN角点检测在Matlab中的实现,请参考SUSAN角点检测的主要代码文件testSusan.m。请注意,如果读入的图像格式不正确,您可能需要自行修改代码。
相关问题
Susan角点检测使用matlab
Susan角点检测算法是一种经典的角点检测算法,可以用MATLAB实现。以下是基于MATLAB的Susan角点检测算法的步骤:
1. 读取输入图像并把它转换为灰度图像。
2. 对灰度图像进行高斯滤波,以去除噪声。
3. 选择一个合适的阈值T,一般情况下T的值在0.5到1之间。
4. 对于每个像素点,计算其周围像素点与自身之间的灰度差,然后统计灰度差小于T的像素点数目。根据这个数目来判断这个像素点是否为角点。
5. 对所有被标记为角点的像素点进行标记,并将它们输出到结果图像中。
下面是MATLAB代码实现:
```matlab
% 读取输入图像并转换为灰度图像
img = imread('input_image.jpg');
gray_img = rgb2gray(img);
% 高斯滤波
filt_img = imgaussfilt(gray_img, 2);
% 设置阈值
T = 0.6;
% 计算每个像素点的角点响应值
corners = zeros(size(filt_img));
for i = 4:size(filt_img, 1)-3
for j = 4:size(filt_img, 2)-3
% 计算灰度差小于T的像素点数目
count = 0;
for p = -3:3
for q = -3:3
if (p ~= 0 || q ~= 0) && abs(filt_img(i+p, j+q) - filt_img(i, j)) < T
count = count + 1;
end
end
end
% 判断是否为角点
if count >= 15
corners(i, j) = 1;
end
end
end
% 在输入图像上绘制角点
[r, c] = find(corners);
imshow(img);
hold on;
plot(c, r, 'r.');
```
在这个实现中,我们使用了MATLAB内置的`imgaussfilt`函数来进行高斯滤波。然后,我们选择了一个阈值T=0.6,并根据Susan角点检测算法的定义来计算每个像素点的角点响应值。最后,我们在输入图像上绘制了检测到的角点。
Matlab实现SUSAN角点检测
SUSAN(Smallest Univalue Segment Assimilating Nucleus)算法是一种基于像素灰度值的角点检测算法,它可以检测出图像中的角点和边缘。下面是Matlab实现SUSAN角点检测的步骤:
1. 读入图像并转化为灰度图像
```matlab
img = imread('lena.jpg');
gray_img = rgb2gray(img);
```
2. 初始化参数
```matlab
r = 3; % 邻域半径
t = 27; % 阈值
```
3. 计算像素与邻域内像素的灰度值差异
```matlab
[m, n] = size(gray_img);
susan_img = zeros(m, n);
for i = r+1:m-r
for j = r+1:n-r
% 计算邻域内像素与中心像素的灰度值差异
diff = gray_img(i-r:i+r,j-r:j+r) - gray_img(i,j);
% 计算像素灰度值的方差
var = sum(sum(diff.^2))/(numel(diff)-1);
% 计算像素与邻域内像素的灰度值差异的均值
mean_diff = sum(sum(abs(diff)))/numel(diff);
% 计算SUSAN函数值
susan_img(i,j) = mean_diff/var;
end
end
```
4. 根据SUSAN函数值进行角点检测
```matlab
corners = zeros(m, n);
for i = r+1:m-r
for j = r+1:n-r
% 判断SUSAN函数值是否超过阈值
if susan_img(i,j) > t
% 标记为角点
corners(i,j) = 1;
end
end
end
```
5. 可视化结果
```matlab
figure;
subplot(1,2,1);
imshow(img);
title('原始图像');
subplot(1,2,2);
imshow(corners);
title('SUSAN角点检测结果');
```
完整的代码如下:
```matlab
img = imread('lena.jpg');
gray_img = rgb2gray(img);
r = 3;
t = 27;
[m, n] = size(gray_img);
susan_img = zeros(m, n);
for i = r+1:m-r
for j = r+1:n-r
diff = gray_img(i-r:i+r,j-r:j+r) - gray_img(i,j);
var = sum(sum(diff.^2))/(numel(diff)-1);
mean_diff = sum(sum(abs(diff)))/numel(diff);
susan_img(i,j) = mean_diff/var;
end
end
corners = zeros(m, n);
for i = r+1:m-r
for j = r+1:n-r
if susan_img(i,j) > t
corners(i,j) = 1;
end
end
end
figure;
subplot(1,2,1);
imshow(img);
title('原始图像');
subplot(1,2,2);
imshow(corners);
title('SUSAN角点检测结果');
```
阅读全文