【双边滤波】基于小波变换的多尺度自适应THZ增强双边滤波器的MATLAB仿真
1.軟件版本
MATLAB2021a
2.本算法理論知識
??????? 提出了一種”基于小波變換的多尺度自適應(yīng)雙邊濾波器“算法。
??????? 其對應(yīng)的算法流程如下所示:
?????? 下面,我們從理論上限介紹一下這里所采用的改進后的算法。
第一:多尺度圖像的自適應(yīng)雙邊濾波
??????? 這個部分,是我們這里所需要研究的創(chuàng)新的算法,這里重點從理論上介紹一下。
首先通過圖像亮度,將圖像區(qū)分為前景圖和背景圖。
?????? 這里,我們主要通過二值話處理,進行圖像的前景和背景的區(qū)分,這個部分的理論為:
?這里,門限T的計算,我們主要通過matlab自帶的一個函數(shù)獲得,這個函數(shù)會根據(jù)每個圖像自動計算出門限T。
graythresh
對于的代碼為:
?然后分別對前景和背景進行sigma參數(shù)的自適應(yīng)調(diào)整。
?????? 這里,sigma的計算公式為:
???????
?這里,我們根據(jù)上面的背景前景,做如下的設(shè)置。
? ? ?這里,我們分別對前景和背景下乘以系數(shù)K1和K2,其中根據(jù)亮度分布(亮的為背景、暗的為物體)來確定BF的各像素的兩個sigma值,讓亮區(qū)域平滑更多(選用大sigma),暗區(qū)域平滑偏小(小sigma)。
3.核心代碼
% Pre-process input and select appropriate filter. function B = bfilter2(A,w,sigma)% Verify that the input image exists and is valid. if ~exist('A','var') || isempty(A)error('Input image A is undefined or invalid.'); end if ~isfloat(A) || ~sum([1,3] == size(A,3)) || ...min(A(:)) < 0 || max(A(:)) > 1error(['Input image A must be a double precision ',...'matrix of size NxMx1 or NxMx3 on the closed ',...'interval [0,1].']); end% Verify bilateral filter window size. if ~exist('w','var') || isempty(w) || ...numel(w) ~= 1 || w < 1w = 5; end w = ceil(w);% Verify bilateral filter standard deviations. if ~exist('sigma','var') || isempty(sigma) || ...numel(sigma) ~= 2 || sigma(1) <= 0 || sigma(2) <= 0sigma = [3 0.1]; end% Apply either grayscale or color bilateral filtering. if size(A,3) == 1B = bfltGray(A,w,sigma(1),sigma(2)); elseB = bfltColor(A,w,sigma(1),sigma(2)); end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Implements bilateral filtering for grayscale images. function B = bfltGray(A,w,sigma_d,sigma_r)% Pre-compute Gaussian distance weights. [X,Y] = meshgrid(-w:w,-w:w); G = exp(-(X.^2+Y.^2)/(2*sigma_d^2));% Create waitbar. h = waitbar(0,'Applying bilateral filter...'); set(h,'Name','Bilateral Filter Progress');% Apply bilateral filter. dim = size(A); B = zeros(dim); for i = 1:dim(1)for j = 1:dim(2)% Extract local region.iMin = max(i-w,1);iMax = min(i+w,dim(1));jMin = max(j-w,1);jMax = min(j+w,dim(2));I = A(iMin:iMax,jMin:jMax);% Compute Gaussian intensity weights.H = exp(-(I-A(i,j)).^2/(2*sigma_r^2));% Calculate bilateral filter response.F = H.*G((iMin:iMax)-i+w+1,(jMin:jMax)-j+w+1);B(i,j) = sum(F(:).*I(:))/sum(F(:));endwaitbar(i/dim(1)); end% Close waitbar. close(h);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Implements bilateral filter for color images. function B = bfltColor(A,w,sigma_d,sigma_r)% Convert input sRGB image to CIELab color space. if exist('applycform','file')A = applycform(A,makecform('srgb2lab')); elseA = colorspace('Lab<-RGB',A); end% Pre-compute Gaussian domain weights. [X,Y] = meshgrid(-w:w,-w:w); G = exp(-(X.^2+Y.^2)/(2*sigma_d^2));% Rescale range variance (using maximum luminance). sigma_r = 100*sigma_r;% Create waitbar. h = waitbar(0,'Applying bilateral filter...'); set(h,'Name','Bilateral Filter Progress');% Apply bilateral filter. dim = size(A); B = zeros(dim); for i = 1:dim(1)for j = 1:dim(2)% Extract local region.iMin = max(i-w,1);iMax = min(i+w,dim(1));jMin = max(j-w,1);jMax = min(j+w,dim(2));I = A(iMin:iMax,jMin:jMax,:);% Compute Gaussian range weights.dL = I(:,:,1)-A(i,j,1);da = I(:,:,2)-A(i,j,2);db = I(:,:,3)-A(i,j,3);H = exp(-(dL.^2+da.^2+db.^2)/(2*sigma_r^2));% Calculate bilateral filter response.F = H.*G((iMin:iMax)-i+w+1,(jMin:jMax)-j+w+1);norm_F = sum(F(:));B(i,j,1) = sum(sum(F.*I(:,:,1)))/norm_F;B(i,j,2) = sum(sum(F.*I(:,:,2)))/norm_F;B(i,j,3) = sum(sum(F.*I(:,:,3)))/norm_F;endwaitbar(i/dim(1)); end% Convert filtered image back to sRGB color space. if exist('applycform','file')B = applycform(B,makecform('lab2srgb')); else B = colorspace('RGB<-Lab',B); end% Close waitbar. close(h);4.操作步驟與仿真結(jié)論
?
5.參考文獻
??A25-09
6.完整源碼獲得方式
方式1:微信或者QQ聯(lián)系博主
方式2:訂閱MATLAB/FPGA教程,免費獲得教程案例以及任意2份完整源碼
總結(jié)
以上是生活随笔為你收集整理的【双边滤波】基于小波变换的多尺度自适应THZ增强双边滤波器的MATLAB仿真的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【FPGA教程案例1】基于FPGA的串行
- 下一篇: 【OMP信道估计】基于OMP压缩感知的信