Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 实施哈里斯拐角检测器

我出于教育目的而安装了哈里斯拐角检测器,但我陷入了哈里斯反应部分。基本上,我正在做的是:
  1. 计算x和y方向上的图像强度梯度
  2. 模糊输出的(1)
  3. 根据输出(2)计算Harris响应
  4. 在3x3邻域和阈值输出中抑制(3)的输出中的非最大值
1和2似乎工作正常;但是,随着Harris响应,我得到的值很小,并且没有任何点达到阈值。输入是标准的户外摄影。

[...] [Ix, Iy] = intensityGradients(img); g = fspecial('gaussian'); Ix = imfilter(Ix, g); Iy = imfilter(Iy, g); H = harrisResponse(Ix, Iy); [...] function K = harrisResponse(Ix, Iy) max = 0; [sy, sx] = size(Ix); K = zeros(sy, sx); for i = 1:sx, for j = 1:sy, H = [Ix(j,i) * Ix(j,i), Ix(j,i) * Iy(j,i) Ix(j,i) * Iy(j,i), Iy(j,i) * Iy(j,i)]; K(j,i) = det(H) / trace(H); if K(j,i) > max, max = K(j,i); end end end max end 对于示例图片,max最终为6.4163e-018,这似乎太低了。



回答:

哈里斯拐角检测中的一个拐角被定义为“区域中的最高像素”(通常为3X3或5x5 ),因此您对没有点到达“阈值”的评论对我来说很奇怪。只要收集所有值高于其周围5x5邻域中所有其他像素值的像素即可。

除此之外:我不确定100%,但是我认为您应该:

K(j,i) = det(H) - lambda*(trace(H)^2)其中,lambda是在您的情况下有效的正常数(Harris建议值为0.04)。

一般而言,过滤输入的唯一明智的时刻是在这一点之前:

[Ix, Iy] = intensityGradients(img);

过滤Ix2 , Iy2和Ixy对我来说没有多大意义。

此外,我认为您的示例代码在这里是错误的(函数harrisResponse是否具有两个或三个输入变量?):

H = harrisResponse(Ix2, Ixy, Iy2); [...] function K = harrisResponse(Ix, Iy)

更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 19:44


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.