你写过哪些比较酷的 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 代码?十行以内


分享到:


相關文章: