接触Matlab是从大二开始的,但那时对数字信号处理不怎么感兴趣,因此一学期下来,连编写一个最基本的function都不会……
大三开始学习数字图像处理,无奈,只好重拾Matlab。虽然Matlab的交互界面做的很好,Manual尤其强大,但由于基础不好,在写程序时还是不时地被细节问题困扰,因此决定用此文来记录那些让我不胜其烦的细节问题,同时也分享给大家
1.
在进行图像处理时常常会用到图像的长宽像素信息,一般语句为
[M N]=size('figurename');
这里M是图像二维矩阵的行数,N是二维图像的列数。比如下面的图像,是一个5*8大小。学过framebuffer的同学应该知道,对于显示屏,一般的坐标是从左向右是x坐标,从上到下是y坐标,因此对于图像来说N表示的是x方向上的大小,M表示y方向的大小。如果不注意,在进行图像几何变换时要注意。否则常常会把因为习惯问题把M误以为是x方向的,而N是y方向的。
2.关于Matlab中变量的类型问题。在Matlab中,我们处理的是整数坐标,但Matlab中像素值本身并不是整数,在Matlab和IPT为表示像素值所支持的数据类型有以下10种:
①double 8byte/pix
②uint8
1byte/pix 平时我们用imread读出图像时一般都是这个类型的
③uint16 2byte/pix
④uint32 4byte/pix
⑤int8
1byte/pix
⑥int16
2byte/pix
⑦int32
4byte/pix
⑧single 4byte/pix
⑨char
2byte/pix
第十种只有在二值图像中才会用到,即logical类的。logical型虽然只用1bit就可以表示,但在Matlab中却需要占用1byte。为嘛?其实我也不清楚,可能Matlab不能像C一样进行位操作吧。
我们知道,Matlab内部是以double类型进行计算的,因此在初始化一个变量时,如果不指定你要给变量赋什么类型的值,它就默认是double型的。如:
a=1;
则a将占8byte,假如你想把a初始化为一个logical类型的,这这样写:a=logical(1);
用一个变量对另一个变量进行初始化,如果不进行类型转换,则被初始化的变量将和用于初始化的变量的类型一致,看下面的例子:
>> a=uint8([255 255])
a
=
255 255
>> b=a(1)+a(2)
b
=