Image Printing Program Based on Halftoning

摘 要:本实验采用半色调技术对图像进行打印和显示,半色调技术是一种基于点模式的灰度级图像打印方案。本实验利用10个不同的3 x 3的黑白点模式近似表示的10个灰度级。其中用黑点全部填充的3 x 3近似表示灰度级为0的黑色灰度级,全部填充白点的3 x 3模式近似表示灰度级为9的白色灰度级,其它的点模式表示这二者之间的灰度级。利用这种方案进行图像的打印时将减小图像的空间分辨率,将导致其尺寸增大,因此,为防止当原始图像过大时输出图像的尺寸大于A4纸的尺寸,编写了对应的调整原始图像尺寸的程序。同时编写了一个生成尺寸为256*256大小的渐变测试图像的程序,来检验所设计的半色调技术打印方案。


(1)实验目的
(a)编写一个使用如图1-1所示的点模式的半色调技术打印灰度图像的程序。要求程序可以对输入图像的尺度(尺寸)进行调整,以便使打印图像不超出A4纸(21.6 x 27.9 cm)的打印区域;要求程序在打印输出以前将输入图像的灰度级范围变换到半色调的整个灰度范围。
(b) 编写一个生成尺寸为256 x 256大小的渐变测试图像的程序。输出图像第1列像素灰度为0,第2列像素灰度为1,以此类推,最后1列像素灰度为255。使用(a)中编写的灰度图像打印程序打印该图。
(c) 使用(a)中编写的灰度图像打印程序打印课本图2.22(a)到(c)【冈萨雷斯,数字图像处理第三版】。打印结果是否符合课本图2.23给出的结论? 并给出解释。
这里写图片描述
图1-1


(2)实验过程与结果
分析:由于经过半色调技术打印程序处理后的图像将要是原始图像的尺寸的3倍(长和宽都是之前的三倍),所以原始图像的尺寸必须小于A4纸张尺寸的,网页打印中,A4纸张默认的每英寸像素点为96,经计算,输入图像尺寸若超过272*352,将对图像尺寸进行调整。 实现实验要求的源程序见附录。
结果:编写的相应的点模式的图像如图1-2所示。
编写的渐变测试图像如图1-3(a)所示,其半色调打印的图像如图1-3(b)所示。为体现图像处理效果,这两个图像都加了边框颜色,图像的都采用了长宽50%的缩小来显示,以此更有助于看出经过半色调技术打印的效果,表现出了这这打印技术改变了图像的尺寸。
其中表1-1显示了课本图2.22(a)到(c)在经过半色调处理之前,之中以及之后的尺寸大小。
这里写图片描述
图1-2
  图1-3(a)图1-3(b)
使用所编写的灰度图像打印程序打印课本图2.22(a)到(c),其输入图像与输出图像分别如图1-4(a)、图1-4(b)、图1-4(c)所示,为了利于观察处理效果,输入输出图像采用等大小显示。
这里写图片描述
这里写图片描述
这里写图片描述
通过观察以上三幅图像,图1-4(c)中的输出图像要比图1-4(a)和图1-4(b)的输出图像视觉效果要好些,图1-4(b)其次。这正好符合等偏爱曲线的结论:对于具有大量细节的图像,可能只需要较少的灰度级就能将图像较好的展现出来。而妇女脸庞图像是包含较少细节的一幅有代表性的图像,摄影师图像包含了中等程度的细节,人群图像相比之下包含有大量的细节,所以人群图采用半色调打印的视觉效果好。

实验源程序
%---------------------------------------------------------------------------------------------------------------------------------------
function y=halftoning(x)
%基于半色调技术的图像打印程序
%获取图像
%获取图像大小
x=imread('ganeral_img.jpg');
[r,c]=size(x);
%判断输入图像尺寸是否超过272*352,若超过进行调整
rscale=double(r)/272;
cscale=double(c)/352;
scale=max(rscale,cscale);
if(scale>1)
    x=imresize(x,1.0/scale);
    imwrite(x,'adjusted_img.jpg');
end
%从256灰度级别量化成10灰度级别
%qim为量化后的图像
[ry,cy]=size(x);
qim=fix(double(x)/25.6);
y=zeros(ry*3,cy*3);
%构造点模式近似表示10个灰度级
dot_mat(:,:,1)=zeros(3,3);
dot_mat(:,:,2)=[0 255 0;0 0 0;0 0 0];
dot_mat(:,:,3)=[0 255 0;0 0 0;0 0 255];
dot_mat(:,:,4)=[255 255 0;0 0 0;0 0 255];
dot_mat(:,:,5)=[255 255 0;0 0 0;255 0 255];
dot_mat(:,:,6)=[255 255 255;0 0 0,;255 0 255];
dot_mat(:,:,7)=[255 255 255;0 0 255,;255 0 255];
dot_mat(:,:,8)=[255 255 255;0 0 255;255 255 255];
dot_mat(:,:,9)=[255 255 255;255 0 255;255 255 255];
dot_mat(:,:,10)=[255 255 255;255 255 255;255 255 255];
%对于图像的每个点进行点阵映射
for (i=1:ry)
    for (j=1:cy)
        level=qim(i,j);
        y((i-1)*3+1:i*3,(j-1)*3+1:j*3)=dot_mat(:,:,level+1);
    end
end
y=uint8(y);
imwrite(y,'halftoning_img.jpg');
end
%---------------------------------------------------------------------------------------------------------------------------------------
function y=general_img()
%生成一个尺寸为256*256大小的渐变测试灰度图像
s=256;
y=zeros(s,s);
for (i=1:s)
    y(:,i)=(i-1)*ones(1,s);
end
y=uint8(y);
imwrite(y,'ganeral_img.jpg');
end
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值