使用Matlab實現美顏功能(雙邊濾波器)

2021-10-05 01:42:58 字數 2082 閱讀 9501

借用一張lena小姐的圖

題外話 lena小姐的全圖真的 ***

可以看出美顏效果還是明顯的,下面進行過程實現

保留邊界細節,模糊變化不明顯的區域

我們知道高斯濾波器可以起到模糊影象的作用,而上述的過程是選擇性地進行模糊,在這裡是對影象的灰度變化進行乙個判斷,達到模糊該模糊的地方,並保留邊緣的細節

這裡可以推斷,我們需要乙個高斯濾波器和乙個反映灰度判斷的矩陣,來處理高斯濾波器各個位置的權重。

獲取

img0 = imread(

%控制高斯濾波器大小的引數

sigma1 =3;

%控制高斯濾波器的標準差

sigma2 =

0.04

;%控制灰度的敏感性,越大的灰度差,權重越小

%模板補零,便於卷積操作,不然會使得區域出現黑邊

img = double(padarray(img0,

[tempsize,tempsize],0

))/255

;%色彩通道提取

imgr = img(:,

:,1)

;imgg = img(:,

:,2)

;imgb = img(:,

:,3)

;

設計濾波器
function out = b_filter(img,tempsize,sigma0,sigma1)

%高斯濾波器模板定義

gauss = fspecial(

'gauss',2

*tempsize+

1,sigma0)

;[m,n]

= size(img)

;for i =

1+ tempsize : m - tempsize

for j =

1+ tempsize : n - tempsize

% 提取處理區域得到梯度敏感矩陣

% img(i - tempsize:i + tempsize,j - tempsize:j + tempsize)

% 為卷積區域,img(i,j)

)為卷積中心點

% 得到灰度差值矩陣,並用高斯函式處理為灰度差越大則最終數值越小的權重矩陣

temp =

abs(img(i - tempsize:i + tempsize,j - tempsize:j + tempsize)

- img(i,j));

temp = exp(

-temp.^2

/(2*sigma1^2)

);%將權重矩陣與高斯濾波器相乘,得到雙邊濾波器,並將權值和化為一

filter

= gauss.

*temp;

filter

=filter

/sum

(filter(:

));% 卷積求和

img(i,j)

=sum

(sum

((img(i - tempsize:i + tempsize,j - tempsize:j + tempsize).*

filter))

);end

end

out = img;

end

使用濾波器依次處理三個色彩通道

最終顯示

figure(1)

subplot(

121)

imshow(img0)

subplot(

122)

% 只顯示彩色區域,去除黑邊

磨皮美顏用在lena小姐上效果還是不是太明顯,換一張圖

NDK 開發實戰 實現相機美顏功能

在 圖形影象處理 實現的美容效果 一文中提到了的美容,採用雙邊濾波演算法來實現,具體的演算法流程和實現思路,大家可以在上篇文章中了解,這篇文章就在不再反覆囉嗦了。這裡我們再次來看下處理效果 上面的效果看似好像不錯,其實存在了大量的問題。從處理速度上來說,雙邊模糊演算法是在二維的高斯函式上新增畫素差值...

matlab使用神經網路實現分類功能

實驗步驟 通過load進倆個資料集,手動打標籤,混合後按三七比例分訓練集和測試集,訓練集上訓練出神經網路模型後,在測試集上驗證,計算錯誤率。load c users administrator desktop rc 載入資料 load c users administrator desktop rc...

Matlab 實現對碼功能

1 什麼叫對碼?舉例說明,資料庫中有兩張表。表 1 編號 描述 11兒科門診 22 門診 33 產科門診 表 2 編號 描述 111兒科門診 222 門診 333 產科門診 現在要在表 1 和表 2 之間找到一一對應。比如 編號1 編號2 11111 22222 33333 這就是對碼。是不是很簡單...