Image Printing Program Based on Halftoning
摘 要: 本实验采用一种基于点模式的灰度级打印方案—半色调技术对图像进行尺度、灰度的调整、显示和打印,实验用3*3的黑白点模式来表示每一个灰度级,用黑点全部填充的 3 * 3 区域近似表示灰度级为0的黑色灰度级,全部填充白点的 3*3 模式近似表示灰度级为9 的白色灰度级,其它的点模式表示这二者之间的灰度级。即输入图像中的每一个像素将对应于打印图像中的3*3个像素, 这样在水平和垂直方向上的空间分辨率将减少为原始图像的 33%。因此为了防止输入图像尺寸过大而使程序打印出来的图像超出A4纸的打印区域,需要编写一个调整原始图像尺寸大小的程序,并写一个生成尺寸为 256*256 大小的渐变测试图像的程序,最后对几幅图像的进行处理来验证半色调技术。
1、实验目的
(a)、 编写一个使用上述点模式的半色调技术打印灰度图像的程序。要求程序可以对输入图像的尺度(尺寸)进行调整,以便使打印图像不超出 A4 纸(21.6 x 27.9 cm)的打印区域;要求程序在打印输出以前将输入图像的灰度级范围变换到半色调的整个灰度范围。
(b)、编写一个生成尺寸为 256*256 大小的渐变测试图像的程序。输出图像第 1 列像素灰度为 0,第 2 列像素灰度为 1,以此类推,最后 1 列像素灰度为 255。使用(a)中编写的灰度图像打印程序打印该图。
(c)、 使用(a)中编写的灰度图像打印程序打印课本图 2.22(a)到(c)。打印结果是否符合课本图 2.23 给出的结论并给出解释。
技术论述
半色调技术是指用少量的色彩将一幅连续色调图像(如灰度图像和彩色图像)量化为一幅二值图像或是只有少数几种色彩的彩色图像,并且量化后图像在一定距离的视觉效果和原始图像相似的技术。众所周知,数字半色调技术是指基于人眼视觉特性和图像呈色特性,利用数学、计算机等工具,在单色/多色二值呈色设备上实现图像的最优再现的一门技术。数字半色调是利用人眼的低通特性,当在一定距离下观察时,人眼将图像中空间上接近的部分视为一个整体。利用此特性,人眼观察到的半色调图像局部平均灰度近似于原始图像的局部平均灰度值,从而整体上形成连续色调的效果。它的发展共经历了三个阶段:照相加网(即模拟加网)、电子加网和计算机数字加网三个发展阶段。
采用 MATLAB 编程环境写 M 函数去完成实验,MATLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。它主要提供以下功能:用于技术计算的高级语言;可对代码、文件和数据进行管理的开发环境;可以按迭代的方式探查、设计及求解问题的交互式工具;可用于线性代数、统计、傅立叶分析、筛选、优化以及数值积分等的数学函数;可用于可视化数据的二维和三维图形函数;可用于构建自定义的图形用户界面的各种工具;可将基于MATLAB的算法与外部应用程序和语言集成的各种函数等。在本实验中我们主要运用了MATLAB扩展的图像处理工具箱进行(如利用函数imread、imshow和imresize可以实现对图像的读取、显示和调整)。
实验过程与分析
1、本实验给出了用点模式近似表示的 10 个灰度级的图像,每一个3 * 3 的黑白点模式表示一个灰度级,用3*3全黑点近似表示灰度级为0的黑色灰度级,3*3全白点近似表示灰度级为9的白色灰度级。通过半色调技术进行图像的显示和打印。根据实验要求可以构建一个三位矩阵来表示10个灰度级,再将图像中的每一个点映射到点阵中,把数据类型转换为unit8就可以生成半色调打印技术的程序。
2、因为要用3*3的像素点代替原来的一个像素点,因此在水平和垂直方向上的空间分辨率将减少为原始图像的 33%,也就是输入图像的尺寸大小可能变为原图像的三倍,所以要对输入图像的大小进行预处理,调整它的尺寸大小,在这里可以调用函数imresize()去缩小图像尺寸大小。采用B = imresize(A, scale)的格式缩小图像,表示图像B的长宽是图像A的长宽的scale倍。若scale大于1,则放大图像;若scale小于1则缩小图像,scale的取值范围为0到10之间。
3、在MATLAB中构造一个256*256大小的矩阵,用for循环语句对每列元素从0到255进行赋值,通过imshow()和imwrite()函数显示输出图像并把输出图像写入当前目录中。
实验结果讨论
由渐变测试灰度图像程序生成的256*256 大小渐变测试灰度图像如图1-1(a)所示,经过半色调打印技术输出的渐变灰度图像如图1-1(b)所示。实验目的(c)要求使用(a)中编写的灰度图像打印程序打印课本图2.22(a)到(c),经过尺寸调整和半色调打印技术后的图像如下图2-1(a)、2-1(b)、2-2(a)、2-2(b)、2-3(c)、2-3(c)所示。经过对比可知输入图像2.22(a)和2.22(c)的尺寸均大于256*256,需要经过图像尺度调整,最后输出图像的尺寸为816*816。输入图像2-22(c)的尺寸不大于256*256,不需要经过图像尺度调整,最后输出图像尺寸为768*768。
图1-1(a) 渐变测试灰度图像
图1-1(b) 半色调打印技术输出的渐变灰度图像
图2-1(a) 经尺寸调整的2.22(a)图像
图2-1(b) 半色调打印技术处理后的2.22(a)图像
图2-2(a) 经尺寸调整的2.22(b)图像
图2-2(b) 半色调打印技术处理后的2.22(b)图像
图2-3(a) 经尺寸调整的2.22(c)图像
图2-3(b) 半色调打印技术处理后的2.22(c)图像
附录:程序清单
1、半色调打印技术的图像处理程序
function y=halfton(x)
%半色调图像打印技术程序
%将图像读入MATLAB环境
%读取图像大小
x=imread('Fig2.22(a).jpg');
IN=1; OUT=2;
[r,c]=size(x);
rscale=double(r)/272;
cscale=double(c)/352;
scale=max(rscale,cscale);
%判断输入图像尺寸是否超过272*352,若超过进行调整
if(scale>1)
x=imresize(x,1.0/scale);
x=uint8(x);
subplot(IN,OUT,1);
imshow(x);
title('调整输入图像适合在A4纸上打印');
imwrite(x,'adjustment.jpg');
end
%把图像的256个灰度级别量化成10个灰度级
[ry,cy]=size(x);
imq=fix(double(x)/25.6);%imq是经过量化的图像
y=zeros(ry*3,cy*3);
%根据实验要求构造近似10个灰度级的点模式
mat(:,:,1)=zeros(3,3);
mat(:,:,2)=[0 1 0;0 0 0;0 0 0]*225;
mat(:,:,3)=[0 1 0;0 0 0;0 0 1]*225;
mat(:,:,4)=[1 1 0;0 0 0;0 0 1]*225;
mat(:,:,5)=[1 1 0;0 0 0;1 0 1]*225;
mat(:,:,6)=[1 1 1;0 0 0;1 0 1]*225;
mat(:,:,7)=[1 1 1;0 0 1;1 0 1]*225;
mat(:,:,8)=[1 1 1;0 0 1;1 1 1]*225;
mat(:,:,9)=[1 1 1;1 0 1;1 1 1]*225;
mat(:,:,10)=[1 1 1;1 1 1;1 1 1]*225;
%对于图像的每个点进行点阵映射
for (i=1:ry)
for (j=1:cy)
level=imq(i,j);
y((i-1)*3+1:i*3,(j-1)*3+1:j*3)=mat(:,:,level+1);
end
end
y=uint8(y);
subplot(IN,OUT,2);
imshow(y);
title('半色调技术打印的图像');
imwrite(y,'halfton.jpg');
end
2、生成渐变测试灰度图像程序
function y=gradient()
%生成一个尺寸为256*256大小的渐变测试灰度图像
s=256;
y=zeros(s,s);
for (i=1:s)
y(:,i)=(i-1)*ones(1,s);
end
y=uint8(y);
figure,imshow(y);
title('渐变测试灰度图像');
imwrite(y,'gradient.jpg');
end
Image Printing Program Based on Halftoning相关推荐
- 数字图像处理实验(1):PROJECT 02-01, Image Printing Program Based on Halftoning
实验要求: Image Printing Program Based on Halftoning Objective: To know in principle what is "halft ...
- 【图像处理】基于半色调技术的图像打印程序(Image Printing Program Based on Halftoning)
实验要求 本实验后面的图像给出了用点模式近似表示的10 个灰度级.每一个灰度级用一个3 x 3 的黑白点模式表示.用黑点全部填充的3 x 3 区域近似表示灰度级为0 的黑色灰度级,全部填充白点的3 ...
- 数字图像处理实验(总计23个)汇总
以下这些实验中的代码全部是我自己编写调试通过的,到此,最后进行一下汇总. 数字图像处理实验(1):PROJECT 02-01, Image Printing Program Based on Half ...
- VC++、MFC最好的开源项目
介绍:介绍一下用VC++/MFC写的最好的开源项目. Sourceforge.net中有许多高质量的VC++开源项目,我列举了一些可以作为VC++程序员的参考. 正文: VC++.MFC中最好的开源项 ...
- VC++网络资源集合
http://www.jizhuomi.com/software/257.html 第一部分:VS2010/MFC开发环境 第二部分:VS2010/MFC应用程序框架 第三部分 ...
- VSTO Ribbons的完整介绍
Ribbons are the modern way to help users find, understand, and use commands efficiently and directly ...
- 最好的开源项目的一些的在VC + +和MFC的
简介 This article lists of some of the best Open Source projects written in VC++/MFC. 本文列出了最好的开放源码在VC ...
- 编程术语_伟大的编程术语烘烤
编程术语 by Preethi Kasireddy 通过Preethi Kasireddy 伟大的编程术语烘烤 (The Great Programming Jargon Bake-off) Impe ...
- 计算机专业PhD申请文书范文,美国留学博士申请文书怎么写之范文分享
[导语]对于计划申请美国博士学位的同学,美国博士申请文书的写作尤为重要.美国博士申请文书怎么写呢?本文无忧考网提供了一篇美国土木工程博士申请个人陈述范文,大家可以根据文章理清自己的写作思路. I am ...
最新文章
- scratch创意小游戏_为何很多孩子都迷恋创意scratch?
- 115怎么利用sha1下载东西_618“甩”度娘,拥抱115,体验和价格才是王道
- 汇编语言(二十五)之成绩分段统计
- 知识工场 | CN-DBpedia 漫游指南
- createsolidcaret 后 很快就不闪烁了_为什么LED灯会越用越暗?为什么会闪烁?
- python3 shutil模块
- php cookie安全,php通过header设置cookie的安全
- java评论回复功能例子_Java实现评论回复功能的完整步骤
- oracle 删除用户和依赖,Oracle 12.2使用手动创建与注册依赖对象来执行联机重定义...
- WCF与 WebService的区别
- 购物商城Web开发第二十二天
- 遥感原理与应用_专家报告 | 叶绿素荧光卫星遥感—原理与应用
- 桌面的文件突然不见了怎么恢复?分享3个恢复指南
- 乌班图系统重启服务器,3种重启Ubuntu服务器命令方式技巧
- HTML Typo.css 中文网页重设与排版
- 绝地求生亚服服务器维护,绝地求生亚服维护时间
- 微信小程序云开发连接MySQL数据库
- 怎样查找某个外文期刊的文献?
- sql server 修改列属性为非必填项
- 运行错误 terminate called without an active exception
热门文章
- 2022最新html5+css3笔记
- MySQL的数据目录
- mysql索引优化有几种_mysql索引优化
- 关于 FastJson
- 戴尔创业节丨这波促销厉害了,Vostro台式机低至1699,还不快来抢!
- 开发方法---敏捷方法
- Spring Boot 之 spring.factories
- 顺序结构程序设计例题:从键盘输入梯形的上、下底边长度和高,计算梯形的面积。
- 图书馆中计算机管理属于,在图书馆中使用计算机管理属于________
- 基于FPGA的自动售货机设计2