用矢量系数进行Matlab图像滤波

时间:2014-11-23 11:45:39

标签: image matlab filter

我正在尝试创建一个使用向量作为系数的过滤器。

imfilter中使用的典型内核如下:

0  1  0
1 -4  1
0  1  0

如果每个元素都是标量,并且滤波基本上采用图像的3x3的所有窗口(MxN),则将像素值乘以匹配系数,并将所有乘积相加以放置输出像素。

我想扩展它,以便内核中的每个元素都不是标量,而实际上是一个向量(Px1)。这使得内核类似于3x3xP。其余功能应该相同:将系数(矢量)乘以图像像素(标量*矢量),求和所有乘积(相同维度的矢量之和),输出矩阵的尺寸应为(MxNxP)

我知道imfilter不支持它并产生(MxN)的结果。

是否有其他Matlab函数可以执行此操作,还是需要从头开始实现?

一些评论:图像通常是逻辑的(0或1),一些滤镜元素可以为零,而不是总和。

1 个答案:

答案 0 :(得分:0)

如果没有其他解决方案,我会蛮力。如果3x3过滤器中的每个向量都有P个元素,我将独立应用每个元素并对结果求和。

%load my image
im = imread(fname);

%define my kernel
h = zeros(3,3,P);  % P elements deep
h(:,:,1) = [0  1  0; 1 -4  1; 0  1  0];  %first element my kernel
h(:,:,2) = [0.2  1.5  0.2; 1.5 -6  1.5; 0.2  1.5  0.2]; %second element
%keep adding elements until you get your P elements

%loop over each element in your kernel
output = zeros(size(im))
for I=1:size(h,3)
    output = output + imfilter(im,h(:,:,I));  %apply filter and accumulate
end