基于半色调技术的图像打印程序(Image Printing Program Based on Halftoning)
2015-01-25 17:47
1776 查看
摘 要:本实验采用半色调技术对图像进行打印和显示。使用实验后面所给出了用点模式近似表示的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阶灰度矩阵
图2给出了将一张经过半色调技术处理过后的图片进行局部放大的图片,可以看到每个元素均按照10个灰度级的矩阵来排列。
图2.局部放大的处理后的照片
⑴ 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.灰度渐变图像
图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图像
而从Fig2.22(a).jpg、Fig2.22(b).jpg、Fig2.22(c).jpg处理后的对比可以看出,(a)所含的细节较少,(c)所包含的细节最多,而Fig2.22(c).jpg处理前后的两幅图像效果更为接近。与等偏爱曲线的结论相同,即:对具有大量细节的图像,只需要较少的灰度级别就可以较好地表示。
以下给出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代码:
相关文章推荐
- Image Printing Program Based on Halftoning (半色调打印技术)
- Image Printing Program Based on Halftoning
- Image Printing Program Based on Halftoning
- Image Printing Program Based on Halftoning
- 【图像处理】基于半色调技术的图像打印程序(Image Printing Program Based on Halftoning)
- 数字图像处理实验(1):PROJECT 02-01, Image Printing Program Based on Halftoning
- 基于内容的图像检索技术(Content-Based Image Retrieval,CBIR)
- 图像分割—基于图的图像分割(Graph-BasedImageSegmentation)
- 图像检索:基于深度学习的CBIR(Content Based Image Retrieval)内容的图片检索论文
- 基于内容的图像检索 Database for Content-Based Image Retrieval
- 基于CNN的图像修复(CNN-based Image Inpainting)
- 图像分割—基于图的图像分割(Graph-BasedImageSegmentation)
- 基于图的图像分割(Graph-Based Image Segmentation)
- GraphicsLab Project之基于物理的着色系统(Physical based shading) - 基于图像的光照(Image Based Lighting)(Specular篇)(一)
- 图像分割—基于图的图像分割(Graph-Based Image Segmentation)
- GraphicsLab Project之基于物理的着色系统(Physical based shading) - 基于图像的光照(Image Based Lighting)(Diffuse篇)
- 图像分割—基于图的图像分割(Graph-Based Image Segmentation)
- Real-Time Rendering (4) - 基于图像的绘制(Image-Based Effects)
- 图像分割—基于图的图像分割(Graph-BasedImageSegmentation)
- 条形图打印程序(Bar Chart Printing Program)