为什么在规范化的互相关之前应用rgb2gray并规范化?

时间:2017-04-12 06:56:19

标签: matlab computer-vision

function out = findWaldo(im, filter) 

% convert image (and filter) to grayscale
im_input = im;
im = rgb2gray(im);
im = double(im);
filter = rgb2gray(filter);
filter = double(filter);
filter = filter/sqrt(sum(sum(filter.^2)));
out = normxcorr2(filter, im);

问题1:为什么我们首先对im进行rgb2gray过滤?

问题2:最后一行实际上做了什么?即,

filter = filter/sqrt(sum(sum(filter.^2)));

2 个答案:

答案 0 :(得分:1)

问题1:为什么先申请rgb2gray

normxcorr2代表"归一化的2-D互相关"适用于2D信号(参见doc)。 RGB图像是3D信号:width x height x color(例如1024 x 1024 x 3,3,因为它是三种颜色)。这就是为什么你先把它压平成一个颜色通道。将滤镜分别应用于每种颜色的图像将是另一种选择,但是您还需要处理三种相关性(平均它们或其他......)。

问题2: filter = filter/sqrt(sum(sum(filter.^2)));做什么?

它对滤镜图像进行平方,然后对行和列进行求和(基本上是滤镜的所有平方灰度值),以获得应用平方根的单个数字,然后用于划分所有滤镜图像值。

我说这是处理特定输入信号的某种规范化,可能是尝试从0 - 1获取值。但是因为规范化交叉相关(normxcorr2 )本身是否正常化,这一步绝对不需要。除非您不做与过滤器变量互相关的操作,否则我认为这是应该删除的工件。

答案 1 :(得分:1)

功能的一般说明

此功能接收两个输入:图像文件和模板。 例如,图像文件可能是Waldo游戏发现的大型场景,模板可以是Waldo自己的照片。 输出是一个名为'out'的矩阵,其大小与图像文件相同。 S.T.每个像素保持“匹配结果”。值越高 - 以像素为中心的补丁保持类似模式(如模板)的可能性越大。 最大值应该在Waldo所在的像素上。

问题1

rgb2gray函数接收带有3个通道的rgb图像并将其转换为灰色图像。 它在im和on滤镜上完成,因为normxcorr2功能仅适用于灰度图像。

问题2

最后一次执行模式的规范化:它将它除以它的范数,从而将其改为1. 实际上,这一行不是必需的,应该删除。规范化阶段已在normxcorr2函数内执行。