您的位置:首页 > 其它

基于半色调技术的图像打印程序(Image Printing Program Based on Halftoning)

2015-01-25 17:47 1691 查看
摘 要:本实验采用半色调技术对图像进行打印和显示。使用实验后面所给出了用点模式近似表示的0到9,10个灰度级来表示一张图片。每一个灰度级用一个3*3的黑白点模式表示。用3*3全黑点近似表示灰度级为0的黑色灰度级,3*3全白点近似表示灰度级为9的白色灰度级。其它的点模式表示这二者之间的灰度级。由于用3*3个像素点代替原来一个像素点,因此在有限的打印面积上需要考虑图像尺寸的大小,故需要对输入图像进行预处理。在此基础上,编写一个生成尺寸为256*256大小的灰度渐变测试图像的程序。输出图像第1列像素灰度为0,第2列像素灰度为1,以此类推,最后1列像素灰度为255,并将这张图片作为半色调技术的打印素材。本实验的输出图像可以在A4纸上打印而不会超出区域,该实验是在MATLAB
R2014a平台上实现。

一、实验原理

1.半色调打印技术

本实验采用半色调技术对图像进行打印和显示。使用实验后面所给出了用点模式近似表示的10个灰度级来表示一张图片。每一个灰度级用一个3*3的黑白点模式表示。用3*3全黑点近似表示灰度级为0的黑色灰度级,3*3全白点近似表示灰度级为9的白色灰度级。因此,我构建一个三位矩阵来表示10个灰度级,其MATLAB代码段如图1所示。



图1.10阶灰度矩阵


图2给出了将一张经过半色调技术处理过后的图片进行局部放大的图片,可以看到每个元素均按照10个灰度级的矩阵来排列。



图2.局部放大的处理后的照片

2.图像缩放处理

由于用3*3个像素点代替原来一个像素点,因此在有限的打印面积上需要考虑图像尺寸的大小,故需要对输入图像进行预处理,若判断读入的图像尺寸过大,调用函数imresize()缩小图像。该函数用于对图像做缩放处理。输入help imresize获得该函数的帮助信息,该函数的调用格式如下:
⑴ B = imresize(A, scale) 返回的图像B的长宽是图像A的长宽的scale倍。scale大于1,则放大图像;scale小于1则缩小图像,scale的取值范围为0到10之间。
⑵ B = imresize(A, [numrows numcols]) numrows和numcols分别指定目标图像的高度和宽度。这种格式允许图像缩放后长宽比例和原图像长宽比例不相同。
⑶ [...] = imresize(..., method) method参数用于指定在改变图像尺寸时所使用的算法,可以为以下几种图3 灰度渐变图像:
'nearest':采用最近邻插值算法;
'bilinear':采用双线性插值算法;
'bicubic':采用双三次插值算法,R2014a版本默认为这种算法。
⑷ [Y newmap] = imresize(X, map, scale)
⑸ [...] = imresize(..., parameter, value, ...)

3.产生灰度渐变图像

构造一256*256大小的矩阵,利用简单的循环语句赋予每列元素从0到255的值,即可调用函数imshow()输出渐变图像,如图3所示。



图3.灰度渐变图像

二、实验结果

以下给出4幅经过半色调打印技术处理前后的图,其中半色调处理之前已进行必要的图像缩放处理!对比图2和图3可看出图像其实进行了小幅度的缩小。素材分别是是图2生成的灰度渐变图像和冈萨雷斯主编的数字图像处理第三版中的图片Fig2.22(a).jpg、Fig2.22(b).jpg、Fig2.22(c).jpg。



图4.缩放处理后、半色调处理前的渐变图像



图5.经过半色调打印技术输出的256*256渐变图像



图6.缩放处理后、半色调处理前的Fig2.22(a).jpg图像



图7.经过半色调打印技术输出的Fig2.22(a).jpg图像



图8.缩放处理后、半色调处理前的Fig2.22(b).jpg图像



图9.经过半色调打印技术输出的Fig2.22(b).jpg图像



图10.缩放处理后、半色调处理前的Fig2.22(c).jpg图像



图11经过半色调打印技术输出的Fig2.22(c).jpg图像

三、结论

本实验要求输出的半色调打印图像的尺寸不能超过A4纸的大小,因此首先需要对图像进行缩放,必然导致图像细节的丢失,故可以看到经过半色调打印技术输出后的图像显得较为模糊。
而从Fig2.22(a).jpg、Fig2.22(b).jpg、Fig2.22(c).jpg处理后的对比可以看出,(a)所含的细节较少,(c)所包含的细节最多,而Fig2.22(c).jpg处理前后的两幅图像效果更为接近。与等偏爱曲线的结论相同,即:对具有大量细节的图像,只需要较少的灰度级别就可以较好地表示。

以下给出Matlab代码:




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐