概述
MATLAB:图像半调转换(halftone)和抖动转换(dither)
- 什么是半色调(halftone)
- 通常的分类
- 小实验1
- 抖动(dither)
- 小实验2
- 附:主要代码 MATLAB
- 小实验1(半调halftone)
- 小实验2(抖动dither)
《MATLAB: 图像半调(halftone)显示和抖动(dither)显示》
本文地址 https://blog.csdn.net/qq_39475211/article/details/86664284
什么是半色调(halftone)
半色调(Halftone)技术是传统印刷中用来处理阶调并模拟连续调(Continue tone)的方法。
图:不连续与连续阶调
印刷机或打印机上所打印的图像,只能借由着墨或不着墨两种阶调来表现层次,像这样的两值化影像称为半色调影像。只要借由调整不同形式、不同大小的墨点,利用人眼可以将图像中邻近墨点进行视觉积分的原理,在一定的距离观察下,便可以使二值化影像重现连续调的感觉。
可以直观理解为牺牲空间来实现不同深浅度,利用墨点数实现印刷的深浅变化。
通常的分类
半色调分别为调幅(Amplitude Modulation, AM)与调频(Frequency Modulation, FM),简单来说,AM是利用网点面积大小来表现图像的浓淡深浅;FM则是以网点排列间距的疏密不同,来呈现图像的层次。
小实验1
1.读取cameraman.tif图像,自行编写代码,完成4x4的halftone转换并显示;
AM方法:
将图像的像素灰度值分成16阶(其实也可以是17阶),然后对应在原像素位置扩大成4x4网格。不同灰度阶强度就涂黑不同的网格数。
比如,在256级灰度中,某个像素灰度是30,由于我们将图像的像素灰度值分成16阶(灰度0~15为1阶,16-31为2阶……),所以这个像素在4x4网格中涂上2格。
(在具体什么位置涂格子呢?其实涂色的位置不是很关键,关键是涂的数目。)
这样处理后,原本30x30图像会变成120x120大小。
相同涂色数,不同涂色位置-对比:
抖动(dither)
抖动(dither)也算是半色调的一个分类,主要分为随机抖动和有序抖动两大类。这两种算法都需要一个模板,也称为抖动矩阵或阈值矩阵,抖动矩阵不仅决定了当亮度或灰度值减小时网点变成黑点的顺序,而且也决定了半色调图像的质量,所以抖动算法的关键是抖动矩阵的构造。
具体的原理可以参考大佬的文章:https://blog.csdn.net/songzitea/article/details/40832565
小实验2
- 阅读dither.pdf文档,理解后使用matlab自带的dither函数对cameraman.tif图像进行dither转换并显示。
我们直接使用MATLAB自带的dither()函数:
MATLAB官网(https://ww2.mathworks.cn/help/matlab/ref/dither.html?s_tid=srchtitle) 有中文的介绍。
附:主要代码 MATLAB
小实验1(半调halftone)
I=imread('cameraman.tif'); %读取图像
J=I/16; %灰度分16级
K=zeros(1024,1024); %新建一个空矩阵来保存结果
for x=1:1:256
for y=1:1:256
switch J(x,y) %匹配16级不同灰度,在空矩阵用4X4 halftone保存
case 1
case 2
K(4*x-3,4*y-3)=1;
case 3
K(4*x-3,4*y-3)=1;K(4*x-2,4*y-2)=1;
case 4
K(4*x-3,4*y-3)=1;K(4*x-2,4*y-2)=1;K(4*x-1,4*y-1)=1;
case 5
K(4*x-3,4*y-3)=1;K(4*x-2,4*y-2)=1;K(4*x-1,4*y-1)=1;K(4*x,4*y)=1;
case 6
K(4*x-3,4*y-3)=1;K(4*x-2,4*y-2)=1;K(4*x-1,4*y-1)=1;K(4*x,4*y)=1;
K(4*x-2,4*y-1)=1;
case 7
K(4*x-3,4*y-3)=1;K(4*x-2,4*y-2)=1;K(4*x-1,4*y-1)=1;K(4*x,4*y)=1;
K(4*x-2,4*y-1)=1;K(4*x-3,4*y-2)=1;
case 8
K(4*x-3,4*y-3)=1;K(4*x-2,4*y-2)=1;K(4*x-1,4*y-1)=1;K(4*x,4*y)=1;
K(4*x-2,4*y-1)=1;K(4*x-3,4*y-2)=1;K(4*x-1,4*y)=1;
case 9
K(4*x-3,4*y-3)=1;K(4*x-2,4*y-2)=1;K(4*x-1,4*y-1)=1;K(4*x,4*y)=1;
K(4*x-2,4*y-1)=1;K(4*x-3,4*y-2)=1;K(4*x-1,4*y)=1;K(4*x-3,4*y-1)=1;
case 10
K(4*x-3,4*y-3)=1;K(4*x-2,4*y-2)=1;K(4*x-1,4*y-1)=1;K(4*x,4*y)=1;
K(4*x-2,4*y-1)=1;K(4*x-3,4*y-2)=1;K(4*x-1,4*y)=1;K(4*x-3,4*y-1)=1;
K(4*x-2,4*y)=1;
case 11
K(4*x-3,4*y-3)=1;K(4*x-2,4*y-2)=1;K(4*x-1,4*y-1)=1;K(4*x,4*y)=1;
K(4*x-2,4*y-1)=1;K(4*x-3,4*y-2)=1;K(4*x-1,4*y)=1;K(4*x-3,4*y-1)=1;
K(4*x-2,4*y)=1;K(4*x-3,4*y)=1;
case 12
K(4*x-3,4*y-3)=1;K(4*x-2,4*y-2)=1;K(4*x-1,4*y-1)=1;K(4*x,4*y)=1;
K(4*x-2,4*y-1)=1;K(4*x-3,4*y-2)=1;K(4*x-1,4*y)=1;K(4*x-3,4*y-1)=1;
K(4*x-2,4*y)=1;K(4*x-3,4*y)=1;K(4*x-2,4*y-3)=1;
case 13
K(4*x-3,4*y-3)=1;K(4*x-2,4*y-2)=1;K(4*x-1,4*y-1)=1;K(4*x,4*y)=1;
K(4*x-2,4*y-1)=1;K(4*x-3,4*y-2)=1;K(4*x-1,4*y)=1;K(4*x-3,4*y-1)=1;
K(4*x-2,4*y)=1;K(4*x-3,4*y)=1;K(4*x-2,4*y-3)=1;K(4*x-1,4*y-2)=1;
case 14
K(4*x-3,4*y-3)=1;K(4*x-2,4*y-2)=1;K(4*x-1,4*y-1)=1;K(4*x,4*y)=1;
K(4*x-2,4*y-1)=1;K(4*x-3,4*y-2)=1;K(4*x-1,4*y)=1;K(4*x-3,4*y-1)=1;
K(4*x-2,4*y)=1;K(4*x-3,4*y)=1;K(4*x-2,4*y-3)=1;K(4*x-1,4*y-2)=1;
K(4*x-1,4*y-3)=1;
case 15
K(4*x-3,4*y-3)=1;K(4*x-2,4*y-2)=1;K(4*x-1,4*y-1)=1;K(4*x,4*y)=1;
K(4*x-2,4*y-1)=1;K(4*x-3,4*y-2)=1;K(4*x-1,4*y)=1;K(4*x-3,4*y-1)=1;
K(4*x-2,4*y)=1;K(4*x-3,4*y)=1;K(4*x-2,4*y-3)=1;K(4*x-1,4*y-2)=1;
K(4*x-1,4*y-3)=1;K(4*x,4*y-2)=1;
case 16
K(4*x-3,4*y-3)=1;K(4*x-2,4*y-2)=1;K(4*x-1,4*y-1)=1;K(4*x,4*y)=1;
K(4*x-2,4*y-1)=1;K(4*x-3,4*y-2)=1;K(4*x-1,4*y)=1;K(4*x-3,4*y-1)=1;
K(4*x-2,4*y)=1;K(4*x-3,4*y)=1;K(4*x-2,4*y-3)=1;K(4*x-1,4*y-2)=1;
K(4*x-1,4*y-3)=1;K(4*x,4*y-2)=1;K(4*x,4*y-1)=1;
end
end
end
完整代码在 https://download.csdn.net/download/qq_39475211/10940207
没办法修改C币……实在要下载可以找某宝代下
小实验2(抖动dither)
I = imread('cameraman.tif');
X = dither(I);
subplot(1,2,1),imshow(I),title("sample");
subplot(1,2,2),imshow(X),title("dither");
by:Morol
cambridge.mo@foxmail.com
最后
以上就是认真夏天为你收集整理的MATLAB:图像半调转换(halftone)和抖动转换(dither)什么是半色调(halftone)抖动(dither)附:主要代码 MATLAB的全部内容,希望文章能够帮你解决MATLAB:图像半调转换(halftone)和抖动转换(dither)什么是半色调(halftone)抖动(dither)附:主要代码 MATLAB所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复