数字图像处理实验(1):PROJECT 02-01, Image Printing Program Based on Halftoning 标签: 图像处理MATLAB 2017-04-2
实验要求:
Image Printing Program Based on Halftoning
Objective:
To know in principle what is “halftoning”, the definition of resolution, and how to print an image in a mono-chromosome printer.
Main requirements:
Ability of programming with C, C++, or Matlab.
Instruction manual:
The following figure shows ten shades of gray approximated by dot patterns. Each gray level is represented by a 3 x 3 pattern of black and white dots. A 3 x 3 area full of black dots is the approximation to gray-level black, or 0. Similarly, a 3 x 3 area of white dots represents gray level 9, or white. The other dot patterns are approximations to gray levels in between these two extremes. A gray-level printing scheme based on dots patterns such as these is called “halftoning.” Note that each pixel in an input image will correspond to 3 x 3 pixels on the printed image, so spatial resolution will be reduced to 33% of the original in both the vertical and horizontal direction. Size scaling as required in (a) may further reduce resolution, depending on the size of the input image.
(a) Write a halftoning computer program for printing gray-scale images based on the dot patterns just discussed. Your program must be able to scale the size of an input image so that it does not exceed the area available in a sheet of size 8.5 x 11 inches (21.6 x 27.9 cm). Your program must also scale the gray levels of the input image to span the full halftoning range.
(b) Write a program to generate a test pattern image consisting of a gray scale wedge of size 256 x 256, whose first column is all 0’s, the next column is all 1’s, and so on, with the last column being 255’s. Print this image using your gray-scale printing program.
(c) Print book Figs. 2.22(a) through (c) using your gray-scale printing program. Do your results agree with the conclusions arrived at in the text in pgs. 61-62 and Fig. 2.23? Explain. You will need to download Figs. 2.22(a) through (c).
实验要求是英文的,不懂的词查查字典就行了,这里就不翻译了。
这里简单介绍一下:
Halftoning, 意思是半色调(技术),而在前面的英文实验要求中详细介绍了其原理。
我们主要看下面这幅图:
假设一幅灰度图像,那么我们知道它的每个像素都有一个对应的灰度值,通常这个灰度的取值范围是 0 ~ 255,即 8 bit 灰度级。而半色调技术的意思就是,如图中所示,将灰度级压缩,划分成 10 个灰度级,取值范围是 0 ~ 9。我们想将以前的图像的一个像素,用现在的一个 3 * 3的矩阵表示,它在原图像中的像素值是一个 0 ~ 255 的数, 在 0 ~ 255 内10等分,即像素灰度值除以25.6,则其像素值就会对应图中的某一种情况,那么就用那个矩阵来表示这个像素。比如灰度是 0, 那么那个像素就用图中 0 的情况的矩阵表示。
程序实现不难,不多说直接上代码吧:
%%
clear all;
clc;
close all;
%% 生成一个大小为 256 *256 的简便灰度图像
s = 256;
y = zeros(s,s);
% 每行对应一个灰度级
for (i=1:s)
y(i,:)=(255-i-1)*ones(1,s);
end
y=uint8(y);
imwrite(y,'general_img.jpg');
%% 基于半色调计数的图像打印程序
% x = imread('general_img.jpg'); %读取图片
x = imread('gray_image.jpg'); %读取图片
figure(1)
imshow(x);
title('original_image');
[r, c] = size(x); % 获取图片大小
% 判断图片大小是否超过 272 * 352, 若超过则进行调整
r_scale = double(r) / 272;
c_scale = double(c) / 352;
scale = max(r_scale, c_scale); % 找出较大的,后面进行压缩
% 若图像过大,进行压缩
if(scale > 1)
x = imresize(x, 1.0 / scale );
imwrite(x, 'adjusted_img.jpg');
end
figure(2)
imshow(x);
title('adjusted_image');
%% 将256灰度级量化成10灰度级别
[ry, cy] = size(x); % 获取图片大小
qim = fix( double(x) / 25.6 ); % 四舍五入。灰度级减小到10灰度级,取整数形式。
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);
figure(3)
imshow(y);
title('halftoning');
imwrite(y,'halftoning.jpg');
实验结果:
第一张图片是原图像;
第二张图片是调整大小后的图像,由于使用半色调技术会将原图像放大,所以事先将图片大小缩小一些,避免使用半色调技术后生成的图像过大;
第三张图片就是结果, 也可以在当前文件夹目录下查看程序生成的halftoning.jpg图片。
数字图像处理实验(1):PROJECT 02-01, Image Printing Program Based on Halftoning 标签: 图像处理MATLAB 2017-04-2的更多相关文章
- 数字图像处理实验(总计23个)汇总 标签: 图像处理MATLAB 2017-05-31 10:30 175人阅读 评论(0)
以下这些实验中的代码全部是我自己编写调试通过的,到此,最后进行一下汇总. 数字图像处理实验(1):PROJECT 02-01, Image Printing Program Based on Half ...
- 数字图像处理实验(12):PROJECT 05-03,Periodic Noise Reduction Using a Notch Filter 标签: 图像处理MATLAB 2017-0
实验要求: Objective: To understand the principle of the notch filter and its periodic noise reducing abi ...
- http://www.cnblogs.com/draem0507/archive/2013/02/01/2889317.html
http://www.cnblogs.com/draem0507/archive/2013/02/01/2889317.html
- oracle问题 《经由直接路径由 EXPORT:V10.02.01 创建的导出文件 IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件》
问题: 经由直接路径由 EXPORT:V10.02.01 创建的导出文件 : 只有 DBA 才能导入由其他 DBA 导出的文件 解决方法:用sys 登录,给当前用户授权,授权语句:grant dba ...
- 2016.02.01日,UdoOS系统项目正式开通了
2016.02.01日,UdoOS系统项目正式开通了,源代码即将开放 Copyright (c) 2016
- 02.02.01 第1章 简介及基础操作(Power BI商业智能分析)
02.02.01.01 powerbi简介 00:10:59 02.02.01.02 query数据导入 00:03:26 具体操作实例如下: 02.02.01.03导入access数据 00:05: ...
- http://www.cnblogs.com/langtianya/archive/2013/02/01/2889682.html
http://www.cnblogs.com/langtianya/archive/2013/02/01/2889682.html
- 042 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 04 案例演示while循环的使用——循环输出英文字母
042 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 04 案例演示while循环的使用--循环输出英文字母 本文知识点:案例演示while循环的使用2 ...
- 数字图像处理实验(16):PROJECT 06-03,Color Image Enhancement by Histogram Processing 标签: 图像处理MATLAB 2017
实验要求: Objective: To know how to implement image enhancement for color images by histogram processing ...
随机推荐
- XSLT 教程
应用自http://www.w3school.com.cn/xsl/index.asp XSL 指扩展样式表语言(EXtensible Stylesheet Language). 万维网联盟开始发展 ...
- 不能解决,复选框在request对象获取的信息后显示在用户信息里面为中文的选项名
因为方框里面value 不用中文?.? 假如用中文呢? 完全可以!!已经试验 如果不用中文,那么中文可以用对象的参数来获得,即在login.jsp中就要用javabean类属性
- 20165210 Java第一次实验报告
20165210 第一次实验报告 实验内容 建立目录运行简单的Java程序 建立自己学号的目录 在上个目录下建立src,bin等目录 Javac,Java的执行在学号目录下 IDEA的调试与设置断点 ...
- git常用命令收藏
git init //初始化本地git环境 git clone XXX//克隆一份代码到本地仓库 git pull //把远程库的代码更新到工作台 git pull --rebase origin m ...
- 畅通工程(自己写的BFS,但后面想了下并查集更好更快)
某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可). ...
- java编程思想第九章接口
9.1抽象类和抽象方法 为什么要有抽象类? 是希望通过通用接口操作一系列类. 那么抽象类的形式是什么样的呢? 声明类的使用使用abstract关键字,且在该类中应该具有抽象方法. 注:抽象方法被关键字 ...
- WPF案例:如何设计搜索框(自定义控件的原则和方法)
我们平时自定义WPF控件的方法有:Style,DataTemplate,ControlTemplate, DependencyProperty, CustomControl等几个方法. 按照优先顺序应 ...
- HDU3887(树dfs序列+树状数组)
Counting Offspring Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- linux下mysql配置文件my.cnf最详细解释
MySQL配置文件在Windows下叫my.ini,在MySQL的安装根目录下:在Linux下叫my.cnf,该文件位于/etc/my.cnf. 可以查找下:find / -name my.cnf m ...
- SRW锁的使用
SRWLock的目的和关键段相同:对一个资源进行保护,不让其它线程访问它.但是,与关键段不同的是,SRWLock允许我们区分哪些想要读取资源的值 的线程(读取者线程)和想要更新资源的值的线程(写入者线 ...