找回密码
 注册
关于网站域名变更的通知
查看: 158|回复: 2
打印 上一主题 下一主题

基于Matlab与FPGA的双边滤波算法实现

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-9-22 11:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 STGing 于 2022-9-26 20:25 编辑
3 W; [) c% s2 l( H5 q; O) h1 f: w6 u- ^% k2 e" U
1.双边波算法的实现
, Q& Y$ r6 |5 _& _! q. J滤波算法的基本思路,就是采用周边像素,加权平均计算一个新的像素,来缓减噪声对当前像素的影响。我们已经介绍了均值滤波,中值滤波,高斯滤波算法。但这几种算法都不够完美,还有继续提升的空间:
$ E. k9 J  j$ ]8 k1)均值滤波:简单粗暴的将窗口内的像素累加后求均值,将噪声平均化,同时边缘纹理也被抹平了,有模糊的作用,作为入门学习用。
7 x) T8 g- e; a. u8 r5 F2)中值滤波:采用窗口内中值的方法,有效剔除了异常高亮或过暗的噪声,对椒盐噪声的去除效果比较好,但实际的图像会伴随着边缘纹理,由于只考虑中值,也会将图像细节去除,只是比均值滤波稍微好一点而已。( M* `2 `9 x8 b
3)高斯滤波:采用欧氏距离,权重呈正态分布,相比均值/中值更优,因为均值/中值权重未考虑距离因素,而高斯噪声则考虑了噪声相对当前像素,呈高斯分布的特性,效果更佳。但高斯滤波也只是考虑了距离,未考虑边缘纹理,对细节的保护仍然不佳。
5 e/ @+ t; U; A7 }6 N( B9 }那么,既考虑噪声高斯分布特性,由将图像边缘纹理考虑进去的滤波算法应运而生。这里我们提出更进一步的滤波—双边滤波。- k( x) g( ]- K) X6 V, _, a
我们这里在前面高斯滤波的基础上,追加实现双边滤波,计划采用3*3的窗口,高斯滤波权重直接采用上一节的代码生成,重点讲解如何进行权重的计算,及Matlab&FPGA的实现。
/ r( ]1 p( e0 Z! ]( W  ]$ U! h- ^% k. w8 t, {
1.1.高斯滤波算法理论& i$ L3 x7 E2 t( T9 t. ^
双边滤波是一种非线性滤波器,它可以达到降噪平滑,同时又保持边缘的效果。和其他滤波原理一样,双边滤波也是采用加权平均的方法,用周边像素亮度值的加权平均,来代表某个像素的强度,所用的加权平均也是基于高斯分布。2 K7 I4 Q1 h$ v) ]# s& Q1 D% V
这里双边滤波的权重,不仅考虑了像素的欧式距离(如高斯滤波),还考虑了像素范围的辐射差异(比如像素与中心像素之间相似程度,也是高斯分布的),结合距离与相似度,最终计算得到最终的权重(距离与相似度的高斯分布)。1 Z& z5 p4 W( x/ ]! S8 m
/ f% t  ~  F2 m  ]1 ~# ?
引用双边滤波算法相关图解,如下所示,其中Gss为只考虑与当前像素空间距离的权重(space weight),而Gsr则为只考虑和当前像素相似度的权重(range weight),最后相乘,得到Gss*Gsr则为同时考虑了距离与相似度的权重,公式累加后最后归一化,得到最终的权重(space & rang)。
5 I* P! |5 S) Z% B9 c由于双边滤波同时考虑了空间距离和像素相似度的影响,因此尤其在具有边缘梯度的图像中,能够有不错的效果。即在平坦区域,空间距离占优势,在边缘区域,像素间相似度占优势,可以直观的用下面这个图来表示(注明出处):) e% Q( ]& B; V( E* @+ e& Y  j0 Z
* b! {: i- f' \- u& j
......
1 q0 s9 f! }+ h" B% M6 J- f- b最后我们封装function便于调用,再给出完整的代码。如下所示:( |0 `' P: k; w- h+ `" _
% 灰度图像双边滤波算法实现
& X( X6 D. S# E! {  J% ~% I为输入的灰度图像9 H2 E& J  P0 G0 J3 @
% n为滤波的窗口大小,为奇数
' V2 g/ L2 r9 l0 ?, D% \! {function B=bilateral_filter_gray(I,n,sigma_d, sigma_r)   
6 c: Y- U5 X5 b$ }/ _% ---------------------------------------------------
; Q; x8 R- F9 m3 T- f; X% 仅供function自测使用( w& |' @( S- C$ q2 a7 f
% clear all;   close all;  clc;
) @- H- X; P3 w# r1 v% I = rgb2gray(imread('../../images/Scart.jpg'));    % 读取jpg图像: t0 C" k# j- |, l( \: u
% n = 3; sigma_d = 3; sigma_r = 0.1; * @1 h2 u4 V5 d+ }+ C& w
dim = size(I);   %读取图像高度、宽度
- b9 e4 S0 ?( P; Lw=floor(n/2);   %窗口 [-w, w]/ K5 z1 l' g, e7 j1 a# i# j
- z! ^$ H" V2 y/ J( S0 i8 q
% ---------------------------------------------------
, z. E+ X- R  j) Z; V  w  |% 计算n*n高斯模板5 `# u7 h7 x2 v" R* P& O
G1=zeros(n,n);   %n*n高斯模板
3 j( ~6 _( A& ~) ~2 Efor i=-w : w
0 @8 [6 I0 \- p8 ]% P2 q    for j=-w : w
; D4 P/ W9 v, L        G1(i+w+1, j+w+1) = exp(-(i^2 + j^2)/(2*sigma_d^2)) ;+ U. x3 i7 a5 G6 V8 d# U, l" B
    end4 \+ `% x7 w2 Z
end
- C7 B4 S5 B, u( ?! Z& o7 D$ d# x: e+ c: H- o8 a- h8 C
% 归一化n*n高斯滤波模板4 R! [" o1 b, q
temp = sum(G1();
3 C- r# x. \8 D, {# u/ jG2 = G1/temp;3 D- B9 U  s7 f5 i5 v- Y
% m- b/ N  p( y! g9 S- v8 B* m* h
% n*n高斯模板 *1024定点化" o( [7 G! p6 v
G3 = floor(G2*1024);$ D3 X5 o7 V8 i- R

) M. C  L4 E4 i  l* U4 W3 \3 @) UI = double(I);- H! o8 }- F$ s2 m( |
% ---------------------------------------------------1 e2 ?: f6 i6 B) G9 ~* n
% 计算n*n双边滤波模板+ 滤波结果7 k0 h, K& n% z. }! t3 x+ r
h = waitbar(0,'Speed of bilateral filter process...');  %创建进度条
2 o$ l$ Q4 Q8 q! k; E: `B = zeros(dim);
/ Z' R7 b) |& e' R& n5 bfor i=1 : dim(1)
% O4 s  ^% x  t8 s' L! y- T0 j    for j=1 : dim(2). y9 ]" M" ?2 w. W; B7 w$ Z: h
         if(i<w+1 </w+1|| i>dim(1)-w || jdim(2)-w)
- P- _& w$ u0 f, F5 J2 m6 x' _            B(i,j) = I(i,j);    %边缘像素取原值" r! S- `( Z% }" R- z& ?
         else% _! q$ V1 {3 M! T. q# {  D
             A = I(i-w:i+w, j-w:j+w);
6 @* v8 G3 v* W4 @+ G%              H =  exp( -(I(i,j)-A).^2/(2*sigma_r^2)  ) ;
1 X2 t6 T) X6 {' ], Y             H = exp( -((A-I(i,j))/255).^2/(2*sigma_r^2))  ;
, k% L7 z9 u! ?1 P             F = G3.*H;8 [3 v/ f7 |0 d5 g' d3 S
             F2=F/sum(F();
" ?; l' ]- x- x% l, k             B(i,j) = sum(F2( .*A(:));
/ K/ X# a% r8 I. L, f+ X......
3 O" c. @. h2 m, _  R

基于Matlab与FPGA的双边滤波算法实现.pdf

766.16 KB, 下载次数: 2, 下载积分: 威望 -5

该用户从未签到

2#
发表于 2022-9-22 14:36 | 只看该作者
本帖最后由 Ele_insect 于 2022-9-23 20:37 编辑
' ]' ?! R+ R" [8 y( D* n6 I: w% a
5 f+ }7 j; j7 {1 u& H3 |/ V数学建模,Matlab很强大的,数学类科技应用软件中在数值计算方面首屈一指,很多学校都被外国限制使用了。

该用户从未签到

3#
发表于 2022-9-22 14:47 | 只看该作者
高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。就这样,简单的理解一下!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-6 03:25 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表