【问题标题】:Matlab image filtering with vector coefficients带有矢量系数的 Matlab 图像滤波
【发布时间】:2014-11-23 11:45:38
【问题描述】:

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

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

0  1  0
1 -4  1
0  1  0

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

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

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

是否有另一个 Matlab 函数可以做到这一点,还是我需要从头开始实现?

一些 cmets:图像通常是逻辑的(0 或 1),一些过滤器元素可以为零,并且对总和没有贡献。

【问题讨论】:

    标签: image matlab filter


    【解决方案1】:

    如果没有其他解决方案,我会暴力破解它。如果您的 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
    

    【讨论】:

    • 感谢您的建议,但是这段代码生成的输出与图像的格式相同,并且基本上是一系列常规过滤器的总和。我正在尝试生成一个输出,其中每个“像素”都是大小为 P 的向量,包含我的过滤器向量和图像像素的乘积之和。
    • 啊,现在我更好地理解了这个问题。与您类似的问题可能是您有 P 个大小为 MxN 的电影帧。您想在空间(一帧内)和时间(跨帧)中进行平滑过滤。这确实是一个不同的问题。我不知道内置函数...只能通过 for 循环来实现
    猜你喜欢
    • 2015-10-22
    • 2013-12-12
    • 1970-01-01
    • 2014-04-29
    • 2013-03-27
    • 2014-05-26
    • 1970-01-01
    • 2016-02-13
    • 2012-06-04
    相关资源
    最近更新 更多