1.7 图像数字化
由前面的内容可知,如照片之类的模拟图像要经过数字化才能得到数字图像,图像数字化包括采样和量化两个操作过程。
采样(sampling)是把空间上的连续的图像分割成离散的像素的集合。采样越细(采样间隔越小),像素越小,越能精细地表现图像;采样越粗(采样间隔越大),图像表现得越粗糙。但采样间隔必须小于2倍的图像函数上限频率的倒数,即满足二维采样定理(Nyquist 准则),特别是对含有大量细节信息的图像区域,需要增加采样点,否则会出现棋盘效应(checkerboard effect),在重建原始图像时会出现严重失真。采样精度有许多不同的设定,如采用水平 256 像素×垂直 256像素、水平512像素×垂直512像素、水平640像素×垂直480像素的图像等。
【例1.1】 图像采样的MATLAB示例。
I=imread('lena.bmp');%读入一幅BMP彩色图像 I1=rgb2gray(I); %由RGB图像转换到灰度图像 imshow(I1),title('256×256');%显示转化的灰度图像,并加上标题“256×256” I2=I1(1:2:end,1:2:end);%%把转化的灰度图像缩小1/4 figure,imshow(I2),title('128×128');%打开一个新的图形窗口来显示缩小1/4的灰度图像 I3=I1(1:4:end,1:4:end);%把转化的灰度图像缩小1/8 figure,imshow(I3),title('64×64');%显示缩小1/8的灰度图像 I4=I1(1:8:end,1:8:end);%把转化的灰度图像缩小1/16 figure,imshow(I4),title('32×32');%显示缩小1/16的灰度图像 I5=I1(1:16:end,1:16:end);%把转化的灰度图像缩小1/32 figure,imshow(I5),title('16×16');%显示缩小1/32的灰度图像 figure, subplot(2,3,1),imshow(I),title(′color image′);%把一个图形窗口划分为2×3显示区域,在左上 区域显示原始彩色图像 subplot(2,3,2),imshow(I1),title('256×256');%在中上区域显示转化的灰度图像 subplot(2,3,3),imshow(I2),title('128×128');%在右上区域显示缩小1/4的灰度图像 subplot(2,3,4),imshow(I3),title('64×64');%在左下区域显示缩小1/8的灰度图像 subplot(2,3,5),imshow(I4),title('32×32');%在中下区域显示缩小1/16的灰度图像 subplot(2,3,6),imshow(I5), title('16×16');%在右下区域显示缩小1/32的灰度图像
结果如图1-15所示。可见采样精度的影响很明显,采样点越少,棋盘效应越严重,当采样点只有16×16时几乎分辨不出图像的任何细节了。另外,关于MATLAB编程知识,请阅读附录A。
图1-15 空间分辨率的影响
量化(quantization)是把像素的灰度(浓淡)变换成离散的整数值的操作。量化越细致(比特数越大),即灰度分辨率越高,灰度级数(浓淡层次)表现越丰富。
【例1.2】 图像量化的MATLAB示例。
I=imread('lena.bmp');%读入一幅BMP彩色图像 I1=rgb2gray(I); %由RGB图像转换到灰度图像 subplot(2,3,1),imshow(I1),title(′8比特(256级)');% 把一个图形窗口划分为2×3显示区域,在左上区 域显示转化的灰度图像,并加标题“8比特(256级)” I2=double(I1);%把uint8图像转化成双精度图像 I2=round(I1/4)*4;%把转化的灰度图像的灰度级减少1/4,再求整 subplot(2,3,2),imshow(uint8(I2)),title(′6比特(64级)');%在中上区域显示灰度级减少1/4的灰度图像 I3=round(I1/16)*16;%把转化的灰度图像减少1/16,再求整 subplot(2,3,3),imshow(uint8(I3)),title(‘4比特(16级)');%在右上区域显示灰度级减少1/16的灰度图像 I4=round(I1/32)*32;%把转化的灰度图像减少1/32,再求整 subplot(2,3,4),imshow(uint8(I4)),title(‘3比特(8级)’);%在左下区域显示灰度级减少1/32的灰度图像 I5=round(I1/64)*64;%把转化的灰度图像减少1/64,再求整 subplot(2,3,5),imshow(uint8(I5)),title(‘2比特(4级)’);%在中下区域显示灰度级减少1/64的灰度图像 I6=(I1>=128)*128;%原始图像中灰度值大于128时为128,其余为0 subplot(2,3,6),imshow(uint8(I6)),title(‘1比特(2级)’);%在右下区域显示灰度级减少1/128的灰度图像
结果如图1-16所示。可见,量化比特数越大,图像质量越好。不过6比特(64级)以上的图像,几乎看不出有什么区别。考虑到在计算机内操作的方便性,一般采用8比特(256级,1字节/像素),这意味着表示像素的灰度(浓淡)是0~255之间的数值。但6比特以下会出现假轮廓(false contouring)现象,比特数越小(灰度分辨率越低),假轮廓越明显。当比特数减少到1比特(2级)时,就成为二值图像(binary image)了,可用白(255或1)和黑(0)的2个数值表示。
图1-16 灰度分辨率的影响
对于彩色图像,需要对每个彩色成分R、G、B分别进行采样和量化,由于每种颜色8比特,所以能够处理28×28×28≈1677万色的图像。