Image Printing Program Based on Halftoning

来源:互联网 发布:端口137 编辑:程序博客网 时间:2024/06/06 19:47

一、摘 要:

  本次实验使用半色调技术对图像进行打印并显示。在本实验中,用点模式近似表示10个灰度级,每一个灰度级用一个3*3的点模式表示。用黑点全部填充的3*3近似表示灰度级为0的黑色灰度级,全部填充白点的3*3模式近似表示灰度级为9的白色灰度级,其他的点模式介于这二者之间的灰度级。基于这种点模式的灰度级打印方案来打印图像,使得输入图像的每一个像素将对应于打印图像的3*3个像素,图像在水平及竖直方向上的空间分辨率近似减少为原始图像的33.3%。本次实验,利用这种半色调技术对给定的图像进行打印、分析,并检验了等偏爱曲线。为了使打印图像不超过A4纸的打印范围(21.6*27.9cm),对输入图像添加了尺寸调整的预处理,同时设计一个大小渐变的256*256图像测试程序来检验半色调技术打印方案。

二、技术论述:
  本次实验采用的是半色调打印技术,将灰度映射成3*3的点阵,256个灰度级别需要量化成10个点模式,每一个灰度级用一个3*3的点模式表示。用黑点全部填充的3*3表示灰度级为0的黑色灰度级,全部填充白点的3*3模式近似表示灰度级为9的白色灰度级,其他的点模式是介于这二者之间的灰度级。其对应关系如下:
            这里写图片描述
  其中grayi,j为图像在(i, j)处的灰度级别,doti,j为量化后的灰度级别,即对应的点阵。10个点阵分别如图2.1所示:
  这里写图片描述

                 图2.1 10个灰度级别对应的点阵
  如果采用上述半色调技术打印,则输入图像中的每一个像素对应打印图像的3*3个像素,最终打印图像的长度和宽度分别变成输入图像的3倍,所以为了保证打印图像不超过A4纸的打印区域,需要对输入图像进行预处理,调整尺寸。当设定的分辨率为96像素/英寸时,调整前图像的尺寸应不超过272*351.5(A4纸尺寸*96/(2.54*3))。
  
             表1.1执行本实验中半色调灰度图像打印程序前后,图像的尺寸变化情况
   这里写图片描述

                           表1.1
  本次实验中,调整图像的尺寸是通过调用函数imresize()来实现,改变图像尺寸时常用的算法有三种:最近邻内插法、双线性内插法和双三次内插法,本试验基于R2014a版本,调用的是双三次内插算法(默认)。
  
三、试验结果讨论:
1.测试半色调技术打印

   编写MATLAB程序,生成一个256*256的大小渐变的测试图像,如图3.1(a)所示,图像的灰度级从左到右依次变化。然后使用半色调技术打印方案将测试图像打印出来,得到的输出的图像如图3.1(b)所示:

  
 这里写图片描述

                图3.1 (a)渐变测试图像(256*256)
                     (b)半色调技术打印的图3.1(a)图像(768*768)

    从输出的结果来看,虽然图像量化后一些渐变过渡的细节丢失了,但是图像的整体轮廓并没有太大的变化,故半色调打印技术在某种程度是可行的。

2.半色调技术的点模式

这里写图片描述

                                图3.2半色调技术的3*3点模式

3.验证等偏爱曲线的结论

   等偏爱曲线的结论:对于有大量细节的图像,可能只需很少的灰度级别来表示。采用半色调打印技术对数字图像处理第三版图2.22(a)到(c)的三幅图像进行打印,为了便于比较,以下3幅尺寸较大的打印图像都和输入图像等大显示,得到对比结果如图3.3所示:

这里写图片描述
这里写图片描述

                      图3.3三幅图像分别采用半色调打印技术的对比结果    其中(a1)(b1)(c1)为原图像,(a2)(b2)(c2)是使用半色调打印技术输出图像    从图3.3的对比结果中可以看出, (a1)图具有少量细节,(c1)图具有大量细节,(b1)介于中间,但结果(c1)与(c2)两幅图像更接近。本实验将灰度级别为256级的灰度级图像量化成灰度级仅10级的图像。从图3.3中,(a1)与(a2)、(b1)与(b2)、(c1)与(c2)的比较可以得出,等偏爱曲线的结论是成立的,即对具有大量细节的图像只需要较少的灰度级就可以很好的表示。

附录: MATLAB代码

function halftoning()%基于半色调技术的灰度图像打印程序%获取图像,可以通过修改x的imread路径来改变图片%获取图像大小x=imread('Fig2.22(b).jpg');figure,imshow(x)[M,N]=size(x);disp([M,N]);%调整输入图像大小 %当设定分辨率为96像素/英寸,输入图像必须小于等于272*351.5if (M>272||N>351)    scale1=272/M;    scale2=351/N;endif (scale1<=scale2)        scale=scale1;else        scale=scale2;    x=imresize(x,scale);end[m,n]=size(x);imwrite(x,'Fig2.22(b)_next.jpg');%用三维矩阵表示半色调技术的点模式   dots=zeros(3,3,10);%1表示白点,0表示黑点dots(:,:,1)=[0 0 0;0 0 0;0 0 0]*255;dots(:,:,2)=[0 1 0;0 0 0;0 0 0]*255;dots(:,:,3)=[0 1 0;0 0 0;0 0 1]*255;dots(:,:,4)=[1 1 0;0 0 0;0 0 1]*255;dots(:,:,5)=[1 1 0;0 0 0;1 0 1]*255;dots(:,:,6)=[1 1 1;0 0 0;1 0 1]*255;dots(:,:,7)=[1 1 1;0 0 1;1 0 1]*255;level(:,:,8)=[1 1 1;0 0 1;1 1 1]*255;dots(:,:,9)=[1 1 1;1 0 1;1 1 1]*255;dots(:,:,10)=[1 1 1;1 1 1;1 1 1]*255;figuresubplot(2,5,1),imshow(dots (:,:,1)),xlabel('0')subplot(2,5,2),imshow(dots (:,:,2)),xlabel('1')subplot(2,5,3),imshow(dots (:,:,3)),xlabel('2')subplot(2,5,4),imshow(dots (:,:,4)),xlabel('3'  )subplot(2,5,5),imshow(dots (:,:,5)),xlabel('4')subplot(2,5,6),imshow(dots (:,:,6)),xlabel('5')subplot(2,5,7),imshow(dots (:,:,7)),xlabel('6')subplot(2,5,8),imshow(dots (:,:,8)),xlabel('7')subplot(2,5,9),imshow(dots (:,:,9)),xlabel('8')subplot(2,5,10),imshow(dots (:,:,10)),xlabel('9')%将原灰度图像的256个灰度级量化为10个灰度级x_next=fix(double(x)/25.6);y=zeros(m*3,n*3);%将三维矩阵映射到各像素点上for i=1:m    for j=1:n        gray=x_next(i,j);        y(((i-1)*3+1):i*3,((j-1)*3+1):j*3)=dots(:,:,gray+1);    endendy=uint8(y);figure,imshow(y);imwrite(y,'image_halftoning.jpg');%生成256*256大小的渐变测试图像test=ones(256,1);test=test-1;for i=1:255    test(:,i+1)=test(:,i)+1;endtest=uint8(test);figure,imshow(test);imwrite(test,'image_test.jpg');x=test;x_next=fix(double(x)/25.6);[m,n]=size(x);y=zeros(m*3,n*3);%将三维矩阵映射到各像素点上for i=1:m    for j=1:n        gray=x_next(i,j);        y(((i-1)*3+1):i*3,((j-1)*3+1):j*3)=dots(:,:,gray+1);    endendy=uint8(y);figure,imshow(y);imwrite(y,'test_halftoning.jpg');end
0 0
原创粉丝点击