一杯清酒邀明月
天下本无事,庸人扰之而烦耳。
posts - 3121,comments - 209,views - 578万

算法思想:如果一个像素与它邻域的像素差别较大(过亮或过暗) , 那它更可能是角点。

算法步骤:

1.上图所示,一个以像素p为中心,半径为3的圆上,有16个像素点(p1、p2、...、p16)。

2.定义一个阈值。计算p1、p9与中心p的像素差,若它们绝对值都小于阈值,则p点不可能是特征点,直接pass掉;否则,当做候选点,有待进一步考察;

3.若p是候选点,则计算p1、p9、p5、p13与中心p的像素差,若它们的绝对值有至少3个超过阈值,则当做候选点,再进行下一步考察;否则,直接pass掉;

4.若p是候选点,则计算p1到p16这16个点与中心p的像素差,若它们有至少9个超过阈值,则是特征点;否则,直接pass掉。

5.对图像进行非极大值抑制:计算特征点出的FAST得分值(即score值,也即s值),判断以特征点p为中心的一个邻域(如3x3或5x5)内,计算若有多个特征点,则判断每个特征点的s值(16个点与中心差值的绝对值总和),若p是邻域所有特征点中响应值最大的,则保留;否则,抑制。若邻域内只有一个特征点(角点),则保留。

代码如下:

复制代码
 1 clear all;
 2 close all;
 3 clc;
 4 
 5 img=imread('lena.jpg');
 6 imshow(img)
 7 
 8 [m n]=size(img);
 9 score=zeros(m,n);
10 
11 t=60;   %阈值
12 for i=4:m-3
13     for j=4:n-3
14         p=img(i,j);    
15         %步骤1,得到以p为中心的16个邻域点
16         pn=[img(i-3,j) img(i-3,j+1) img(i-2,j+2) img(i-1,j+3) img(i,j+3) img(i+1,j+3) img(i+2,j+2) img(i+3,j+1) ...
17             img(i+3,j) img(i+3,j-1) img(i+2,j-2) img(i+1,j-3) img(i,j-3) img(i-1,j-3) img(i-2,j-2) img(i-3,j-1)];
18 
19         %步骤2
20         if abs(pn(1)-p)<t && abs(pn(9)-p)<t
21            continue; 
22         end
23         
24         %步骤3     
25         p1_5_9_13=[abs(pn(1)-p)>t abs(pn(5)-p)>t abs(pn(9)-p)>t abs(pn(13)-p)>t];
26         if sum(p1_5_9_13)>=3
27             ind=find(abs(pn-p)>t);
28             %步骤4         
29             if length(ind)>=9
30                 score(i,j) = sum(abs(pn-p));      
31             end
32         end
33     end
34 end
35 
36 %步骤5,非极大抑制,并且画出特征点
37 for i=4:m-3
38     for j=4:n-3
39         if score(i,j)~=0
40             if max(max(score(i-2:i+2,j-2:j+2)))==score(i,j)               
41                 [img(i-3,j), img(i-3,j+1), img(i-2,j+2), img(i-1,j+3), img(i,j+3), img(i+1,j+3), img(i+2,j+2), img(i+3,j+1), ...
42                  img(i+3,j), img(i+3,j-1), img(i+2,j-2), img(i+1,j-3), img(i,j-3), img(i-1,j-3), img(i-2,j-2), img(i-3,j-1)]= ...
43                  deal(255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255);
44             end
45         end
46     end
47 end
48 figure;
49 imshow(img);
复制代码

结果如下:

原图:

检测结果:

posted on   一杯清酒邀明月  阅读(456)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示