数学建模社区-数学中国

标题: 十行以内,你写过哪些比较酷的 Matlab 代码? [打印本页]

作者: 青年梦想家    时间: 2015-10-14 23:56
标题: 十行以内,你写过哪些比较酷的 Matlab 代码?



一键磨皮


I= double(imread('1.jpg'));H = RF(I,30,100) - 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)]);
前方高能预警,观后可能对心理产生不适,慎重下拉。。。






原图

磨皮后

其中RF是递归域变换滤波器,可以到Domain Transform for Edge-Aware Image and Video Processing下载,也可以换成其他保边平滑的滤波器,例如双边滤波,导向滤波,各向异性扩散滤波器等等。

算法说明:
关于这个算法,其实就是在网上搜索一个磨皮教程,然后用Matlab程序化实现而已。
这里,给出最后的计算公式,

EPFFilter是一种保边平滑的滤波器,Opacity控制透明度,GaussBlur是高斯滤波了,这些PS的操作也非常易于用Matlab程序化,没有什么难的。若真真对这个算法感兴趣,可以参考人在旅途的博客简单探讨可牛影像软件中具有肤质保留功能的磨皮算法及其实现细节。

后续说明:
考虑到Matlab并没有自带RF这个函数,有作弊的嫌疑。所以私底下找了隔壁老王,在他的Matlab2014b上修改测试了一下,将RF换成imguidedfilter函数,在Matlab2014a可以直接使用以下6行代码,关于这个函数可以看官方文档 Guided filtering of images

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)]);



个人而言,关于图像处理或者计算机视觉的学习,最好还是多看paper吧。
推荐一下,台湾大学咨询工程学系暨研究所Yung-Yu Chuang教授的计算摄影学的Readings,上面搜集好多好看的paper。(如果是计算机视觉方面研究生可以无视)
  

摘自知乎:http://www.zhihu.com/question/27780598


作者: 269534893    时间: 2015-10-16 00:05
haoba,zhegexueyizhiyongyouzunshouguize

作者: w789123    时间: 2015-10-26 18:19
运筹学, 里边 讲到单纯形,各种理论的时候, 需要一步步的计算,矩阵
,其实最关键就是对旋转元进行计算,有下边代码,很方便

第一行, 输入旋转元 行, (t=... 开始, 目的求对偶单纯, 单独计算第一行 , 也可以不要)
第二行, 输入旋转元 列, (t=... 开始.  目的为了求单纯形, 单独计算第一列 , 可以不用)

r=4 ;     t=a(r,:);t=t.*(t<0) ;d=abs(a(1,:)./t) ;d(end)=0  
c=2 ;     t=a(:,c);t=t.*(t>0) ;d=a(:,end)./ t ;d(1)=0  
t=a(r,:) ./ a(r,c);
a=-a(:,c)*t + a;
a(r,:)=t;






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5