guided filter matlab,导向滤波器(Guided Filter)
矩形滤波代码(计算窗口平均值)
function imDst = boxfilter(imSrc, r)
% BOXFILTER O(1) time
box filtering using cumulative sum
%
% - Definition imDst(x,
y)=sum(sum(imSrc(x-r:x+r,y-r:y+r)));
% - Running time independent of
r;
% - Equivalent to the function:
colfilt(imSrc, [2*r+1, 2*r+1], 'sliding', @sum);
% - But much
faster.
[hei, wid] = size(imSrc);
imDst = zeros(size(imSrc));
%cumulative sum over Y axis
imCum = cumsum(imSrc, 1);
%difference over Y axis
imDst(1:r+1, :) = imCum(1+r:2*r+1, :);
imDst(r+2:hei-r, :) = imCum(2*r+2:hei, :) - imCum(1:hei-2*r-1,
:);
imDst(hei-r+1:hei, :) = repmat(imCum(hei, :), [r, 1]) -
imCum(hei-2*r:hei-r-1, :);
%cumulative sum over X axis
imCum = cumsum(imDst, 2);
%difference over Y axis
imDst(:, 1:r+1) = imCum(:, 1+r:2*r+1);
imDst(:, r+2:wid-r) = imCum(:, 2*r+2:wid) - imCum(:,
1:wid-2*r-1);
imDst(:, wid-r+1:wid) = repmat(imCum(:, wid), [1, r]) -
imCum(:, wid-2*r:wid-r-1);
end
单通道图像的导向图滤波代码
function q = guidedfilter(I, p, r, eps)
% GUIDEDFILTER O(1) time
implementation of guided filter.
%
% - guidance image: I (should be a
gray-scale/single channel image)
% - filtering input image: p (should be a
gray-scale/single channel image)
% - local window radius: r
% - regularization parameter:
eps
[hei, wid] = size(I);
N = boxfilter(ones(hei, wid), r); % the size of each local
patch; N=(2r+1)^2 except for boundary
pixels.
mean_I = boxfilter(I, r) ./ N;
mean_p = boxfilter(p, r) ./ N;
mean_Ip = boxfilter(I.*p, r) ./ N;
cov_Ip = mean_Ip - mean_I .* mean_p; % this is the covariance
of (I, p) in each local patch.
mean_II = boxfilter(I.*I, r) ./ N;
var_I = mean_II - mean_I .* mean_I;
a = cov_Ip ./ (var_I + eps); % Eqn. (5) in the paper;
b = mean_p - a .* mean_I; % Eqn. (6) in the
paper;
mean_a = boxfilter(a, r) ./ N;
mean_b = boxfilter(b, r) ./ N;
q = mean_a .* I + mean_b; % Eqn. (8) in the paper;
end
彩色图像的导向图滤波代码
function q = guidedfilter_color(I, p, r, eps)
% GUIDEDFILTER_COLOR O(1) time implementation of guided filter using a color image as
the guidance.
%
% - guidance image: I (should be a color
(RGB) image)
% - filtering input image: p (should be a
gray-scale/single channel image)
% - local window radius: r
% - regularization parameter:
eps
[hei, wid] = size(p);
N = boxfilter(ones(hei, wid), r); % the size of each local
patch; N=(2r+1)^2 except for boundary
pixels.
mean_I_r = boxfilter(I(:, :, 1), r) ./ N;
mean_I_g = boxfilter(I(:, :, 2), r) ./ N;
mean_I_b = boxfilter(I(:, :, 3), r) ./
N;
mean_p = boxfilter(p, r) ./ N;
mean_Ip_r = boxfilter(I(:, :, 1).*p, r) ./ N;
mean_Ip_g = boxfilter(I(:, :, 2).*p, r) ./ N;
mean_Ip_b = boxfilter(I(:, :, 3).*p, r) ./
N;
% covariance of (I, p) in each local patch.
cov_Ip_r = mean_Ip_r - mean_I_r .* mean_p;
cov_Ip_g = mean_Ip_g - mean_I_g .* mean_p;
cov_Ip_b = mean_Ip_b - mean_I_b .* mean_p;
% variance of I in each local patch: the matrix Sigma in Eqn
(14).
% Note the variance in each local patch is a 3x3 symmetric
matrix:
% rr, rg, rb
% Sigma = rg, gg, gb
% rb, gb, bb
var_I_rr = boxfilter(I(:, :, 1).*I(:, :, 1), r) ./ N -
mean_I_r .* mean_I_r;
var_I_rg = boxfilter(I(:, :, 1).*I(:, :, 2), r) ./ N -
mean_I_r .* mean_I_g;
var_I_rb = boxfilter(I(:, :, 1).*I(:, :, 3), r) ./ N -
mean_I_r .* mean_I_b;
var_I_gg = boxfilter(I(:, :, 2).*I(:, :, 2), r) ./ N -
mean_I_g .* mean_I_g;
var_I_gb = boxfilter(I(:, :, 2).*I(:, :, 3), r) ./ N -
mean_I_g .* mean_I_b;
var_I_bb = boxfilter(I(:, :, 3).*I(:, :, 3), r) ./ N -
mean_I_b .* mean_I_b;
a = zeros(hei, wid, 3);
for y=1:hei
for x=1:wid
Sigma = [var_I_rr(y, x), var_I_rg(y, x),
var_I_rb(y, x);
var_I_rg(y, x), var_I_gg(y, x), var_I_gb(y, x);
var_I_rb(y, x), var_I_gb(y, x), var_I_bb(y, x)];
%Sigma = Sigma + eps * eye(3);
cov_Ip = [cov_Ip_r(y, x), cov_Ip_g(y, x),
cov_Ip_b(y, x)];
a(y, x, :) = cov_Ip * inv(Sigma + eps * eye(3));
% Eqn. (14) in the paper;
end
end
b = mean_p - a(:, :, 1) .* mean_I_r - a(:, :, 2) .* mean_I_g -
a(:, :, 3) .* mean_I_b; % Eqn. (15) in the
paper;
q = (boxfilter(a(:, :, 1), r).* I(:, :, 1)...
+ boxfilter(a(:, :, 2), r).* I(:, :, 2)...
+ boxfilter(a(:, :, 3), r).* I(:, :, 3)...
+ boxfilter(b, r)) ./ N; % Eqn. (16) in the
paper;
end
图像保边滤波
% example: edge-preserving smoothing
% figure 1 in our paper
close all;
I = double(imread('.\img_smoothing\cat.bmp')) / 255;
p = I;
r = 4; % try r=2, 4, or 8
eps = 0.2^2; % try eps=0.1^2, 0.2^2,
0.4^2
q = guidedfilter(I, p, r, eps);
figure();
imshow([I, q], [0, 1]);
抠图的代码
% example: guided feathering
% figure 9 in our paper
close all;
I = double(imread('.\img_feathering\toy.bmp')) / 255;
p = double(rgb2gray(imread('.\img_feathering\toy-mask.bmp')))
/ 255;
r = 60;
eps = 10^-6;
q = guidedfilter_color(I, p, r, eps);
figure();
imshow([I, repmat(p, [1, 1, 3]), repmat(q, [1, 1, 3])], [0,
1]);
guided filter matlab,导向滤波器(Guided Filter)相关推荐
- 三种经典图像滤波方法介绍——双边滤波(Bilateral filter)、导向滤波(Guided Fliter)、滚动导向滤波(RollingGuidedFilter)
文章目录 一.前言 二.双边滤波(Bilateral filter) 2.1 双边滤波的理论介绍及公式推导 2.2 双边滤波的matlab程序实现 三.导向滤波(Guided Fliter) 3.1 ...
- OpenCV图像处理学习九,双边滤波器 (Bilateral Filter)和中位数滤波器 (Median Filter)
均值模糊无法克服边缘像素信息丢失缺陷,原因是均值滤波是基于平均权重,赋予图像内的像素与图像边缘像素一样的比值权重,图像处理是会使得边缘部分图像部分像素信息丢失: 高斯模糊部分克服了该缺陷,但是无法完全 ...
- [PAMI2013] Guided Image Filtering 导向滤波器以及OpenCV-Python代码实现
论文地址:https://www.researchgate.net/profile/Xiaoou_Tang/publication/236228168_Guided_Image_Filtering/l ...
- matlab中滤波器函数filter的c语言实现
参考出处:https://wenku.baidu.com/view/6a8eeeee9fc3d5bbfd0a79563c1ec5da50e2d6e5.html 实现: MATLAB的filter滤波函 ...
- matlab滤波器函数6,matlab中滤波器函数filter的c语言实现
参考出处:https://wenku.baidu.com/view/6a8eeeee9fc3d5bbfd0a79563c1ec5da50e2d6e5.html 实现: MATLAB的filter滤波函 ...
- matlab ellipticf,[Matlab]椭圆滤波器设计:低通、高通、带通和带阻
椭圆滤波器(Elliptic filter)又称考尔滤波器(Cauer filter): 这是在通带和阻带等波纹的一种滤波器. 椭圆滤波器相比其他类型的滤波器,在阶数相同的条件下有着最小的通带和阻带波 ...
- 快速导向滤波 matlab,导向滤波小结:从导向滤波(guided filter)到快速导向滤波(fast guide filter)的原理,应用及opencv实现代码...
http://blog.csdn.net/kuweicai/article/details/78385871 1. 导向滤波简介 导向滤波是何凯明在学生时代提出的一个保边滤波(edge-preserv ...
- 详解——导向滤波(Guided Filter)和快速导向滤波
文章目录 导读 原理推导 导向滤波的应用 导向滤波的实现 快速导向滤波的实现 算法效果 代码 参考 导读 在图像滤波算法中,导向滤波.双边滤波.最小二乘滤波并称三大保边滤波器,他们是各向异性滤波器.相 ...
- 基于可学习参数的深度导向滤波器 Deep Guide Filter
深度导向滤波器 这是一篇传统方法和深度学习方法结合的算法,他在引导滤波器(关于这块可查阅我之前的文章)上融入了可学习的参数,从而赋予了更强大的拟合能力,从而可以应用在多个图像处理任务上 关于 Deep ...
- matlab中filter卷积补零,matlab中的卷积——filter,conv之间的区别
filter是做滤波,其实原理跟卷积是想通的,只不过处理结果的方法不同,先看示例程序: x=[1,2,3,4,5]; h=[1,1,1]; y1=conv(h,x) y2=filter(h,1,x) ...
最新文章
- mysql答题表设计_PHP+MYSQL问答系统中的提问和回答的表怎么设计
- SAP HUM 因为存在Open TO 单据使得HU不能创建盘点凭证
- PM-Summit 2019全球产品经理大会北京站即将开幕!
- Reactor构架模式--转载
- 为什么Nginx性能比Apache高
- 基于源码仿建视频解析网站
- 菜鸟的jQuery源码学习笔记(三)
- ImportError: cannot import name ‘constants‘
- iis下php 500错误
- 利用二分法解决 leetcode 378. Kth Smallest Element in a Sorted Matrix
- 03、数据类型(02)
- tensorflow 如何获取模型中想要的张量
- 联想小新/YOGA新品发布会官宣:定档10月20日
- C++socket编程(一):绪论
- 2017年高考改革地区:浙江、上海
- MySQL数据库基础教程(视频)
- 世界上最好用的截图工具 吸色工具 Snipaste
- 语音处理基础:预加重、分帧、帧移、加窗、傅里叶变换
- DDD战略建模在重构业务系统时的实践
- 《欲望之源》(《MEAN GENES》)
热门文章
- 安卓-控制台-和风天气,和风天气3.0使用方法
- html入门怎么换字体颜色,html怎么改字体颜色
- linux文件系统ram,Linux常用文件系统概述-RAM篇
- SpringBoot整合JpaMapper实现基于mybatis的快速开发
- linux ipsec racoon工具移动客户端模式详细配置
- 超人能一拳把某个人打出地球吗?
- Ocelot对Consul进行配置,通过Ocelot访问502错误问题
- AS移动开发 类微信界面2_Activity的生命周期与跳转(持续更新中)
- 有人问“一花一世界,一叶一菩提”
- BaseProxy:异步http/https中间人