美文网首页
BoxFilter的Matlab实现方法

BoxFilter的Matlab实现方法

作者: 学而时习之_不亦说乎 | 来源:发表于2017-07-29 02:16 被阅读388次
  • Boxfilter
    假如图像中存在I(x, y)这样一个像素点,那么 I(x-r, y-r),I(x, y+r), I(x-r, y), I(x+r, y)这样四个点构成了一个矩形区域,该区域的像素值之和存储在矩阵G(x, y) 位置。可以用下面的代码来表示上述过程
G(x, y)=sum(sum(I(x-r:x+r,y-r:y+r)));

这样的滤波器就叫做Boxfilter,它在求解方差、Haar滤波、引导滤波器中都有使用到。今天,我将分析几种在Matlab中实现Boxfilter的方法。

  • 方法一,X,Y方向分别累加求和
%利用X方向和Y方向的累加来完成
function imDst = boxfilter(imSrc,w,h)
[hei, wid] = size(imSrc);
imDst = zeros(size(imSrc));

%w,h分别为盒子滤波器的盒子半径
% w must <= (wid-1)/2
% h must <= (hei-1)/2

%Y轴方向的累加
imCum = cumsum(imSrc, 1);
%首先考虑首部的H个像素
imDst(1:h+1, :) = imCum(1+h:2*h+1, :);
%中间像素
imDst(h+2:hei-h, :) = imCum(2*h+2:hei, :) - imCum(1:hei-2*h-1, :);
%尾部h个像素
imDst(hei-h+1:hei, :) = repmat(imCum(hei, :), [h, 1]) - imCum(hei-2*h:hei-h-1, :);

%X轴方向的累加
imCum = cumsum(imDst, 2);
%首先考虑首部的X个像素
imDst(:, 1:w+1) = imCum(:, 1+w:2*w+1);
%考虑中间像素
imDst(:, w+2:wid-w) = imCum(:, 2*w+2:wid) - imCum(:, 1:wid-2*w-1);
%考虑尾部w个像素
imDst(:, wid-w+1:wid) = repmat(imCum(:, wid), [1, w]) - imCum(:, wid-2*w:wid-w-1);
end
  • 方法二,利用积分图像
function [ imDst ] = boxfilter_opt2(imSrc,w,h )
%BOXFILTER_OPT2 Summary of this function goes here
%   w,h为盒子滤波器的半径
%   首先得到积分图像
intImg = integralImage(imSrc);
%   去掉零首行和零首列
intImg = intImg(2:end,2:end);
dim = size(imSrc);
pad_intImg = padarray(intImg,[w+1,h+1],'replicate');
A_intImg = pad_intImg(1:dim(1),1:dim(2));
B_intImg = pad_intImg(1:dim(1),end-dim(2)+1:end);
C_intImg = pad_intImg(end-dim(1)+1:end,end-dim(2)+1:end);
D_intImg = pad_intImg(end-dim(1)+1:end,1:dim(2));

imDst = A_intImg + C_intImg - B_intImg - D_intImg;

end

第一个方法的Matlab运行时间为:0.032s,第二个方法的运行时间为:0.065s。

相关文章

  • BoxFilter的Matlab实现方法

    Boxfilter假如图像中存在I(x, y)这样一个像素点,那么 I(x-r, y-r),I(x, y+r), ...

  • matlab全局优化与局部优化

    参考博客matlab全局优化与局部优化最优化方法的Matlab实现 在实际的工作和生活过程中,优化问题无处不在,比...

  • MutSigCV进行突变负荷分析寻找Driver Gene

    本文的安装方法是有Matlab授权,运行MutSig源代码的方法。 如果没有Matlab授权,可以 http://...

  • 优化算法matlab实现(一)相关matlab基础

    之前实现优化算法用的java、python、c++,matlab使用较少,接下来会用matlab来实现。此处记录了...

  • 系统辨识

    Matlab SI toolbox Matlab的Toolbox功能更强大,实现了Ljung的算法。但也更复杂。可...

  • 03_demo1用电量

    MATLAB注释的方法 MATLAB注释的方法:%第一种方法:注释单行%{第二种方法:注释多行%}第三种方法-快捷...

  • Matlab发布C#调用的dll

    编写Matlab程序 编写测试方法 Matlab中测试 调用deploytool工具,选择 .NET Assemb...

  • MATLAB计算转移矩阵源代码

    如何用MATLAB计算转移矩阵 如何用MATLAB计算马尔科夫矩阵 如何用MATLAB实现马尔科夫过程 这些都是一...

  • 1-2 帮助

    一、问题解决方法 自带 help dos 网站 百度 Matlab中文论坛 Matlab技术论坛 Matlab官网...

  • 8.截取数组的一部分

    Matlab实用编程小技巧1000例之八 来源:matlab在数组中取前n项数方法

网友评论

      本文标题:BoxFilter的Matlab实现方法

      本文链接:https://www.haomeiwen.com/subject/camakxtx.html