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)');