使用Matlab进行图像处理

openkk 12年前
     <p>     写这篇文章的目的并不是为了向大家推荐一款软件,只是想说明作为一名程序员,只要改变一下思路我们可以在很多地方发挥自己的专业优势,而不仅仅是通过闲暇之余帮MM杀杀毒,装装系统来表现自己的专业和与众不同;其次,希望通过分享的形式总结自己,如果同时还能对一两位朋友有点用处的话,那就更加欣慰了。 </p>    <p>     说到图像处理软件,大部分人第一个想到的就是photoshop,photoshop的强大是毋庸质疑的,而且对于大多数用户来说photoshop也是 最佳选择。但对于我们这些整天与代码打交道的人来说,有个更有效的工具,那就是Matlab。提起Matlab,知道的人可能不是很多,即使用过也多是用 作一种数学工具,但搞图像研究的人都知道,Matlab在图像处理上的强大远远超过了photoshop。但为什么用的人这么少呢,理由很简单,没有可视 化的操作界面,所有的处理都必须通过函数调用来完成。对一般用户来说,这是一个不可逾越的障碍,但对于程序员来说这根本就不是什么问题。</p>    <p>      在开始介绍如何使用Matlab进行常见的图像处理之前,几个问题先说明一下:</p>    <p>      1、Matlab与Photoshop的区别比较类似于Linux与Windows,因此不习惯命令操作的朋友请略过此文。</p>    <p>      2、同所有的软件一样,Matlab的使用需要经过一段时间的学习才能熟练掌握,因为没有可视化的图形操作界面,很多人可能会认为比较困难。我自己的体验是,对程序员来说,掌握Matlab最基本的图像处理所需要的时间绝不会超过学习photoshop的时间,而且一旦掌握了方法你会发现这是一件很爽的事,更重要的是可以利用自己的编程能力做一些“有趣”的事。</p>    <p>      3、Matlab的强大之处在于可以精确的对图像的每一个区域甚至每一个像素进行操作,而这需要一定图像处理基础,这就像玩Linux一样,如果对内核有一定了解会玩得更加轻松,但请相信我,这远远没有你想的那么困难。      </p>    <p>      下面是Matlab中经常使用的一些图像处理函数:</p>    <p>       读取图像:img=imread('filename'); //支持TIFF,JPEG,GIF,BMP,PNG,XWD等文件格式。</p>    <p>       显示图像:imshow(img,G);   //G表示显示该图像的灰度级数,如省略则默认为256。</p>    <p>       保存图片:imwrite(img,'filename');  //不支持GIF格式,其他与imread相同。</p>    <p>       亮度变换:imadjust(img,[low_in,high_in],[low_out,high_out]);  //将low_in至high_in之间的值映射到low_out至high_out之间,low_in以下及high_in以上归零。</p>    <p>       绘制直方图:imhist(img);    </p>    <p>       直方图均衡化:histeq(img,newlevel);   //newlevel表示输出图像指定的灰度级数。</p>    <p>       图像平滑与锐化(空间滤波):w=fspecial('type',parameters);imfilter(img,w);     //这两个函数结合将变得十分强大,可以实现photoshop里的任意滤镜。  </p>    <p>       图像复原:deconvlucy(img,PSF);  //可用于图像降噪、去模糊等处理。</p>    <p>       以上都是最基本的操作,看起来只是很简单的几个函数,但实际上已经包含了不少photoshop里的功能,如photoshop里的滤镜功能都可以使用 imfilter来实现,更多的功能及使用我会在以后的文章里介绍。如果有朋友想知道如何使用Matlab来实现photoshop里的各种功能,可以在下面留言或给我发消息,我会尽量帮助你。</p>    <p>      </p>    <span style="color:red;"> <p>      没想到这篇文章引来这么多争议,看来是我没把意思表达清楚,本来在评论里已经做了一些解释,但还是有朋友没有看到,只好在这里特地做一下说明。</p> <p>      1、这篇文章没有任何贬低photoshop的意思,我自己就是photoshop的fans,对于photoshop不敢说高手但至少也算只老鸟,而且对photoshop我比一般人有更深刻的理解,它的大多数算法我都认真研究过。</p> </span>    <p></p>    <p>      2、我的本意并不是比较Matlab与Photoshop或者其他图像处理软件的优劣,只是想表述一种观点,作为一名程序员同样的事情我们可以有不同的做法。在图像处理方面,Matlab与Photoshop都有自己无法替代的特色,但同时也有不少共通之处,使用Matlab并不表示要放弃Photoshop,这就像你在使用Windows的时候也可以再装一个Linux,它们并不是矛盾的。你完全可以在享受photoshop便捷操作的同时,体验到Matlab的不同,甚至利用自己的编程能力,构建出更有特色的工具来。程序员的最主要的工作就是与各种各样的软件打交道,如果使用或开发这些软件的时候我们能想得更多,看得更远些,是不是会多些机会呢?</p>    <p> </p>    <p style="color:red;">     3、关于Matlab想多说几句,下面有朋友评论说Matlab只是用在科学计算上,不适合做图像处理,这只能说这些朋友对Matlab或是图像处理并不了解,只要查一下全球最流行的数字图像处理书籍使用的是什么工具就明白了</p>