你寫過哪些比較酷的 Matlab 代碼?十行以內

一鍵磨皮

I= double(imread('1.jpg'));
H = RF(I,30,100) - I + 128;
G = imfilter(H,fspecial('gaussian',[3 3],100));
opacity = 50;
Dst = (I*(100 - opacity)+(I+2*G-256)*opacity)/100;
imshow([uint8(I) uint8(Dst)]);

這是輸入的原圖。

<img data-rawheight="636" style="height:636px" data-rawwidth="625" class="lazy" src="//p2.ttnews.xyz/loading.gif" data-original="https://pic3.zhimg.com/b2e220c645b7c55b7b84bd8593fc780e_b.jpg" class="origin_image zh-lightbox-thumb" width="625" src="//p2.ttnews.xyz/loading.gif" data-original="https://pic3.zhimg.com/b2e220c645b7c55b7b84bd8593fc780e_r.jpg">

你寫過哪些比較酷的 Matlab 代碼?十行以內

這是效果圖

<img data-rawheight="636" data-rawwidth="625" class="lazy" data-original="https://pic4.zhimg.com/41d28e4989e5e2e77b57634220c6427b_b.jpg" class="origin_image zh-lightbox-thumb" width="625" data-original="https://pic4.zhimg.com/41d28e4989e5e2e77b57634220c6427b_r.jpg">

你寫過哪些比較酷的 Matlab 代碼?十行以內

再來兩張效果

<img data-rawheight="989" data-rawwidth="1035" class="lazy" data-original="https://pic4.zhimg.com/a6a377c8908f5672d0bd502004445017_b.jpg" class="origin_image zh-lightbox-thumb" width="1035" data-original="https://pic4.zhimg.com/a6a377c8908f5672d0bd502004445017_r.jpg">

你寫過哪些比較酷的 Matlab 代碼?十行以內

這裡,RF是遞歸域變換濾波器(Domain Transform Filter),也可換成其它保邊平滑的濾波器(Edge Perserving Filter),例雙邊濾波,導向濾波等。不是什麼黑魔法,就是PhotoShop平湖法磨皮:

,按步驟用Matlab化而已。這裡,給出最後的計算公式,

Dest =(Src * (100 - Opacity) + (Src + 2 * GuassBlur(EPFFilter(Src) - Src + 128) - 256) * Opacity) /100

EPFFilter是一種保邊平滑的濾波器,Opacity控制透明度,GaussBlur是高斯濾波了,簡單的PS的操作非常易於用Matlab程序化。

磨皮後可以再增加美白功能,也是不超過十行代碼的,效果看起來更佳(其實我是想說,可以賣一個好價錢呢)。若是對皮膚美白,磨皮,祛痘這些算法感興趣,可以在Imageshop博客 進一步學習。

<img data-rawheight="570" data-rawwidth="1366" class="lazy" data-original="https://pic3.zhimg.com/bf8e0d157151ed8fcc6128dadd1e7072_b.jpg" class="origin_image zh-lightbox-thumb" width="1366" data-original="https://pic3.zhimg.com/bf8e0d157151ed8fcc6128dadd1e7072_r.jpg">

你寫過哪些比較酷的 Matlab 代碼?十行以內

補充說明,

Matlab並沒有收錄RF這個函數,但Matlab2014a已經有imguidedfilter函數,在Matlab2014a可以運行以下6行代碼。

I= double(imread('7.png'));
H =double(imguidedfilter(uint8(I))) - I + 128;
G = imfilter(H,fspecial('gaussian',[3 3],100));
opacity = 50;
Dest = (I*(100 - opacity)+(I+2*G - 256)*opacity)/100;
imshow([uint8(I) uint8(Dest)]);

它的成品做出來是這個樣子的。

<img class="lazy" data-original="https://pic4.zhimg.com/8c860dc578fa8ac820b095a75ae1aa73_b.png" data-rawwidth="1244" data-rawheight="689" class="origin_image zh-lightbox-thumb" width="1244" data-original="https://pic4.zhimg.com/8c860dc578fa8ac820b095a75ae1aa73_r.jpg">

你寫過哪些比較酷的 Matlab 代碼?十行以內

除了此外,圖像處理中很多算法都可以用Matlab在10行內完成的。

比如美圖秀秀的濾鏡,彩鉛,素描等,我就不再洩露更多秘密了。

<img data-rawheight="665" data-rawwidth="1258" class="lazy" data-original="https://pic1.zhimg.com/a05218dbde53e1716882db6c67ee86f0_b.jpg" class="origin_image zh-lightbox-thumb" width="1258" data-original="https://pic1.zhimg.com/a05218dbde53e1716882db6c67ee86f0_r.jpg">

你寫過哪些比較酷的 Matlab 代碼?十行以內

<img data-rawheight="665" data-rawwidth="1258" class="lazy" data-original="https://pic4.zhimg.com/7240ab81264ea81da700959030ebfe93_b.jpg" class="origin_image zh-lightbox-thumb" width="1258" data-original="https://pic4.zhimg.com/7240ab81264ea81da700959030ebfe93_r.jpg">

你寫過哪些比較酷的 Matlab 代碼?十行以內

我曾有打算做出一款比美圖秀秀更加友好功能更加強大的修圖軟件,共享出去,但是一個人力量太渺小了。非為牟利,只是因為我也修圖愛好者。

鉛筆畫特效:

你寫過哪些比較酷的 Matlab 代碼?十行以內

去霧特效:

你寫過哪些比較酷的 Matlab 代碼?十行以內


分享到:


相關文章: