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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 STGing 于 2022-9-26 20:25 编辑 / ?5 Y& U2 ^+ F' O5 ?4 v

# Q& g) X) `5 N1.双边波算法的实现  z3 j% c* W# e( H" r5 R* V
滤波算法的基本思路,就是采用周边像素,加权平均计算一个新的像素,来缓减噪声对当前像素的影响。我们已经介绍了均值滤波,中值滤波,高斯滤波算法。但这几种算法都不够完美,还有继续提升的空间:
! t3 f2 j- }) o( Y1)均值滤波:简单粗暴的将窗口内的像素累加后求均值,将噪声平均化,同时边缘纹理也被抹平了,有模糊的作用,作为入门学习用。  U6 l  j' z& |5 M+ O6 c* k
2)中值滤波:采用窗口内中值的方法,有效剔除了异常高亮或过暗的噪声,对椒盐噪声的去除效果比较好,但实际的图像会伴随着边缘纹理,由于只考虑中值,也会将图像细节去除,只是比均值滤波稍微好一点而已。
1 E% j1 y9 Q. b+ X! V) Y( g& M3)高斯滤波:采用欧氏距离,权重呈正态分布,相比均值/中值更优,因为均值/中值权重未考虑距离因素,而高斯噪声则考虑了噪声相对当前像素,呈高斯分布的特性,效果更佳。但高斯滤波也只是考虑了距离,未考虑边缘纹理,对细节的保护仍然不佳。" O$ h' D+ V! t) Z# P
那么,既考虑噪声高斯分布特性,由将图像边缘纹理考虑进去的滤波算法应运而生。这里我们提出更进一步的滤波—双边滤波。
% `$ {" X2 K, ?6 ~我们这里在前面高斯滤波的基础上,追加实现双边滤波,计划采用3*3的窗口,高斯滤波权重直接采用上一节的代码生成,重点讲解如何进行权重的计算,及Matlab&FPGA的实现。% }4 H3 O/ T9 N& j1 i

' W0 p6 m9 }: C1.1.高斯滤波算法理论
  W/ U. k) P9 V双边滤波是一种非线性滤波器,它可以达到降噪平滑,同时又保持边缘的效果。和其他滤波原理一样,双边滤波也是采用加权平均的方法,用周边像素亮度值的加权平均,来代表某个像素的强度,所用的加权平均也是基于高斯分布。
9 |' u; }( e! M5 b3 i这里双边滤波的权重,不仅考虑了像素的欧式距离(如高斯滤波),还考虑了像素范围的辐射差异(比如像素与中心像素之间相似程度,也是高斯分布的),结合距离与相似度,最终计算得到最终的权重(距离与相似度的高斯分布)。& A0 B0 {, Y9 E7 _& V& A

& o) ~3 k+ X" d引用双边滤波算法相关图解,如下所示,其中Gss为只考虑与当前像素空间距离的权重(space weight),而Gsr则为只考虑和当前像素相似度的权重(range weight),最后相乘,得到Gss*Gsr则为同时考虑了距离与相似度的权重,公式累加后最后归一化,得到最终的权重(space & rang)。
2 R! Z& B# H# s" `( W& q* O由于双边滤波同时考虑了空间距离和像素相似度的影响,因此尤其在具有边缘梯度的图像中,能够有不错的效果。即在平坦区域,空间距离占优势,在边缘区域,像素间相似度占优势,可以直观的用下面这个图来表示(注明出处):) n5 q& E1 I+ n: V5 d% z' k
% D2 v6 E) ?0 u3 ]
......! j8 M% q7 F/ v
最后我们封装function便于调用,再给出完整的代码。如下所示:4 r  X6 u% V! a$ q5 F+ w2 [
% 灰度图像双边滤波算法实现
2 `; U/ g8 I& `, w) N5 i7 Z5 u" o/ S( Z% I为输入的灰度图像# D, _% P5 R/ F$ w' |2 O" v- @" X
% n为滤波的窗口大小,为奇数
! l; y& D; R" I5 Y  Mfunction B=bilateral_filter_gray(I,n,sigma_d, sigma_r)   ( N" D$ c2 k* {; N- S4 G; I
% ---------------------------------------------------
) q/ }  A8 v: Q# t; V  e% 仅供function自测使用5 b/ v2 [6 n) H5 D
% clear all;   close all;  clc;& u& [0 E; n: _; P
% I = rgb2gray(imread('../../images/Scart.jpg'));    % 读取jpg图像
% f8 z9 P7 K& v6 G- w( g6 i" x# _% n = 3; sigma_d = 3; sigma_r = 0.1;
. v, p+ C$ v' Y: ~dim = size(I);   %读取图像高度、宽度
) m. W( V9 O. b: q& @* Kw=floor(n/2);   %窗口 [-w, w]' [2 F/ D' T$ K6 ?, u8 `

9 `, O; O- @3 T& H/ f% ---------------------------------------------------
( A  `) B' l2 w# s1 Q3 j8 |% 计算n*n高斯模板
' R( l, ~- g7 a$ x" C: D! pG1=zeros(n,n);   %n*n高斯模板. L7 \5 U0 S/ I) i
for i=-w : w% p/ N# Z: ^8 u" M4 z
    for j=-w : w
8 ~* A' {9 M3 t5 c! d        G1(i+w+1, j+w+1) = exp(-(i^2 + j^2)/(2*sigma_d^2)) ;, O9 \8 f! U" ~
    end9 t: {% }* o4 N  ?+ c
end
  |3 @9 t$ z+ }* x$ `7 H) N) R' R' b9 B' m8 _4 I) s$ O) c: j
% 归一化n*n高斯滤波模板; @/ z% s: U% W3 k  t
temp = sum(G1();0 Z+ R3 E' o7 q: W' k5 c2 o
G2 = G1/temp;
7 m. {7 `0 h  B1 J
: B, L9 m8 Q) s2 M% n*n高斯模板 *1024定点化' |1 V" u) ~* I% c
G3 = floor(G2*1024);
  Y+ i* q, Z# j! i" C; H' ~" r- j; P( T1 r
I = double(I);
2 n$ I) k7 ^8 w. e! u! y% ---------------------------------------------------+ g; ~% d$ Y8 J7 ?' e
% 计算n*n双边滤波模板+ 滤波结果
5 u8 Z: a1 `5 p0 [; D$ v4 ^6 A5 oh = waitbar(0,'Speed of bilateral filter process...');  %创建进度条
8 ~! s( ?; S" T5 k9 ?. ?' VB = zeros(dim);; ^8 W# G' \: |+ V
for i=1 : dim(1)7 U. b" a' L4 `& f8 h
    for j=1 : dim(2)
) Z' G- V3 O1 a% T  [9 Q) k         if(i<w+1 </w+1|| i>dim(1)-w || jdim(2)-w)
4 P8 h* D. g6 d: _% q            B(i,j) = I(i,j);    %边缘像素取原值
' B+ N) d/ @" U% S$ P" J: s8 Q         else9 a" I: \" p7 A
             A = I(i-w:i+w, j-w:j+w);
3 y- f2 M7 E4 w# L%              H =  exp( -(I(i,j)-A).^2/(2*sigma_r^2)  ) ;* j8 U5 e; i% W8 U
             H = exp( -((A-I(i,j))/255).^2/(2*sigma_r^2))  ;
$ G% R, ~$ m) f, n. ~0 k             F = G3.*H;4 k: e4 N$ J. i5 @- Y, g" |
             F2=F/sum(F();
5 {( v& P' A; {% Q: C  `  K             B(i,j) = sum(F2( .*A(:));% ^: C& s) s+ ]: @( V6 L
......
/ ^# z+ u1 ?& R7 R# J

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

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

该用户从未签到

2#
发表于 2022-9-22 14:36 | 只看该作者
本帖最后由 Ele_insect 于 2022-9-23 20:37 编辑 : k+ f. c0 d$ e5 E  e

" I6 I7 S+ H/ v3 f) j& @数学建模,Matlab很强大的,数学类科技应用软件中在数值计算方面首屈一指,很多学校都被外国限制使用了。

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-31 23:38 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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