DIP实验报告1-Image Printing Program Based on Halftoning
- 格式:pdf
- 大小:403.62 KB
- 文档页数:7
深圳大学研究生课程:数字图像处理
课程作业实验报告
实验名称:ImagePrintingProgramBasedonHalftoning
实验编号:Proj02-01
签名:
姓名:
学号:217226
截止提交日期:2017年10月13日
摘要:本实验采用半色调技术对图像进行打印和显示。使用实验后面所给出了用点模式
近似表示的0到9,10个灰度级来表示一张图片。每一个灰度级用一个3*3的黑白点模式表
示。用3*3全黑点近似表示灰度级为0的黑色灰度级,3*3全白点近似表示灰度级为9的白
色灰度级。其它的点模式表示这二者之间的灰度级。由于用3*3个像素点代替原来一个像素
点,因此在有限的打印面积上需要考虑图像尺寸的大小,故需要对输入图像进行预处理。在
此基础上,编写一个生成尺寸为256*256大小的灰度渐变测试图像的程序。输出图像第1列
像素灰度为0,第2列像素灰度为1,以此类推,最后1列像素灰度为255,并将这张图片作
为半色调技术的打印素材。本实验的输出图像可以在A4纸上打印而不会超出区域,该实验是
在MATLABR2017a平台上实现。一、技术论述
1.半色调打印技术
本实验采用半色调技术对图像进行打印和显示。使用实验后面所给出了用点模式近
似表示的10个灰度级来表示一张图片。每一个灰度级用一个3*3的黑白点模式表示。用
3*3全黑点近似表示灰度级为0的黑色灰度级,3*3全白点近似表示灰度级为9的白色灰
度级。因此,这就需要我构建一个三位矩阵来表示10个灰度级,其MATLAB代码段如图
1-1所示。
图1-110阶灰度矩阵其对应的数学关系为:
,,10256ijijdotgray
其中grayi,j为图像在(i,j)处的灰度级别,doti,j为量化后的灰度级别,即对应的点阵。
10个点阵分别如图1-2所示:
图1-210个灰度级别对应的点阵2.产生灰度渐变图像
构造一个256*256大小的矩阵,利用简单的循环语句赋予每列元素从0到255的值,
即可调用函数imshow()输出灰度渐变图像,如图1-3所示。
二、实验结果讨论
1.测试半色调打印技术
利用先前编写的MATLAB程序所产生的灰度渐变图像,使用半色调技术打印方案将灰
度渐变图像打印出来,得到的新的出的图像,如图1-4所示。
2.验证等偏爱曲线的结论
等偏爱曲线的结论:对于有大量细节的图像,可能只需要较少的灰度级。
利用半色调打印技术对数字图像处理第三版图2.22(a)到(c)的三幅图像进行打印,得
到对比结果如图1-5所示。
从图1-5的对比结果中可以看出,Fig2.22(a)和Fig2.22(b)图具有少量细节,
Fig2.22(c)图具有大量细节,结果Fig2.22(c)的半色调打印出来的图像更为接近原图。本实
验将灰度级别为256级的灰度级图像量化成灰度级仅10级的图像。从图1-5中的各图片比较
可以得出,等偏爱曲线的结论是成立的,即对具有大量细节的图像,只需要较少的灰度级就
可以很好的表示。三、实验结果
图1-3利用MATLAB产生的灰度渐变图像
3图1-4
4图1-5左侧为原图,右侧为采用半色调技术打印出来的图片
附录:MATLAB程序
functiony=halftoning(x)
%x是输入图像矩阵y是输出图像矩阵
[r,c]=size(x);%获取行与列
%图像比例超出8.5*11英寸时,通过下采样降低空间分辨率pixelsPerInch=96;
widthMaxPixels=11.3*pixelsPerInch;
heightMinPixels=16.5*pixelsPerInch;
rScale=double(r)/widthMaxPixels;
cScale=double(c)/heightMinPixels;
scale=rScale;
if(scale scale=cScale; end if(scale>1) downsampling_ave(x,fix(scale)); end %从256灰度级别量化成10灰度级别dimg=fix(double(x)/25.6); y=zeros(r*3,c*3); %构造点阵M=zeros(3,3,10); M(1:3,1:3,1)=255.*[0,0,0;0,0,0;0,0,0]; M(1:3,1:3,2)=255.*[0,1,0;0,0,0;0,0,0]; M(1:3,1:3,3)=255.*[0,1,0;0,0,0;0,0,1]; M(1:3,1:3,4)=255.*[1,1,0;0,0,0;0,0,1]; M(1:3,1:3,5)=255.*[1,1,0;0,0,0;1,0,1]; M(1:3,1:3,6)=255.*[1,1,1;0,0,0;1,0,1];M(1:3,1:3,7)=255.*[1,1,1;0,0,1;1,0,1]; M(1:3,1:3,8)=255.*[1,1,1;0,0,1;1,1,1]; M(1:3,1:3,9)=255.*[1,1,1;1,0,1;1,1,1]; M(1:3,1:3,10)=255.*[1,1,1;1,1,1;1,1,1]; %对于图像的每个点进行点阵映射fori=1:r forj=1:c level=dimg(i,j); y((i-1)*3+1:i*3,(j-1)*3+1:j*3)=M(1:3,1:3,level+1); end end y=uint8(y); end functiony=test_img() s=256; y=zeros(s,s); fori=1:s y(:,i)=(i-1)*ones(1,s); end y=uint8(y); imwrite(y,'ganeral_img.bmp'); end functiony=downsampling_ave(x,scale) [r,c]=size(x); if(mod(r,scale)~=0||mod(c,scale)~=0) error('Theparamscalemustbeaintegerthatcanbedivisiblebybothofimg''s rowandcol'); end new_r=r/scale; new_c=c/scale; s=scale; y=zeros(new_r,new_c); fori=1:new_r forj=1:new_c win=x((i*s-s+1):(i*s),(j*s-s+1):(j*s)); y(i,j)=floor(sum(sum(win))/s^2); end endy=uint8(y); imwrite(y,['lena_downsampling_ave_',num2str(new_r),'_',num2str(new_c), '.bmp']); end %project2.1.1 im1=imread('ganeral_img.bmp'); im=halftoning(im1); figure subplot(1,2,1); imshow(im1); title('灰度渐变测试图像');subplot(1,2,2); imshow(im); title('采用半色调打印技术的灰度渐变测试图像'); figure im2=imread('Fig2.22(a).jpg'); ima=halftoning(im2); subplot(1,2,1); imshow(im2); title('Fig2.22(a).jpg'); subplot(1,2,2); imshow(ima); title('采用半色调打印技术的Fig2.22(a)'); figure im3=imread('Fig2.22(b).jpg'); imag=halftoning(im3); subplot(1,2,1); imshow(im3); title('Fig2.22(b).jpg'); subplot(1,2,2); imshow(imag); title('采用半色调打印技术的Fig2.22(b)'); figure im4=imread('Fig2.22(c).jpg'); image=halftoning(im4); subplot(1,2,1); imshow(im4); title('Fig2.22(c).jpg'); subplot(1,2,2); imshow(image); title('采用半色调打印技术的Fig2.22(c)');