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

  1. 阅读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:256for y=1:1:256switch J(x,y) %匹配16级不同灰度,在空矩阵用4X4 halftone保存case 1case 2K(4*x-3,4*y-3)=1;case 3K(4*x-3,4*y-3)=1;K(4*x-2,4*y-2)=1;case 4K(4*x-3,4*y-3)=1;K(4*x-2,4*y-2)=1;K(4*x-1,4*y-1)=1;case 5K(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 6K(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 7K(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 8K(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 9K(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 10K(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 11K(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 12K(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 13K(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 14K(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 15K(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 16K(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;endend
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)相关推荐

  1. Matlab中mat2gray函数的原理和使用及图像类和类型间的转换

    mat2gray 函数mat2gray可以把任意任意类型图像矩阵转换为取值范围为[0,1]的归一化double类数组. 调用格式 B = mat2gray(A) 将图像矩阵A归一化为图像矩阵B,A的值 ...

  2. python 视频抽帧_一种用于超高帧频图像流到标准模拟视频流转换的抽帧方法与流程...

    本发明属于图像处理技术领域,涉及一种用于超高帧频图像流到标准模拟视频流转换的抽帧方法. 背景技术: 在红外成像制导系统中,随着导弹与目标的距离接近,目标逐渐增大形成不稳定的斑状,最后以很快的速度充满整 ...

  3. python使用openCV加载图像、并将BGR格式转换成HSV格式、定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)、并使用mask信息进行颜色分离、BGR格式的图像转化为RGB、并可视化

    python使用openCV加载图像.并将BGR格式转换成HSV格式.定义HSV格式中需要分离颜色的掩码(掩模)区间(mask).并使用mask信息进行颜色分离.将BGR格式的图像转化为RGB.可视化 ...

  4. MATLAB浮点数与十六进制(浮点数)转换

    MATLAB浮点数与十六进制(浮点数)转换: 笔者最近在使用MATLAB搞串口工具,想要实现浮点数与hex(16进制浮点数)之间的转换. 在网上找到了实现的方法,在这里分析一下. 浮点数转HEX转换: ...

  5. matlab 数值格式转换,Matlab字符串转换及数值格式转换

    Matlab字符串转换及数值格式转换 字符串转换函数 abs 字符串到ASCII转换 dec2hex 十进制数到十六进制字符串转换 fprintf 把格式化的文本写到文件中或显示屏上 hex2dec ...

  6. matlab从csv文件中读取时间转换异常

    matlab 从 csv 文件中读取时间转换异常 最近一段时间一直在研究 matlab 读取各种数据,自以为文件读取的水平还行.可是,昨天,帮朋友读取一个 csv 文件时,时间转换却让我感到非常奇怪. ...

  7. 相机与图像--小孔成像模型与坐标系--坐标系转换

    利用图像序列进行三维重建的过程,相当于把一张张由很多像素组成的二维图像还原到三维空间中的一个过程.通过了解整个投影的过程,就可以很容易理解如何利用图像进行三维重建,以及三维重建中的关键步骤是什么.该小 ...

  8. day3 - 图像在不同色彩空间间的转换

    本期将了解三种不同的颜色空间,RGB,HSV,GRAY.会使用OpenCV来读取三种颜色空间,并且操作不同空间的转换,观察不同颜色空间的特点. 完成本期内容,你可以: 了解RGB,HSV,GRAY三种 ...

  9. c# - C#用fo-dicom对CT图像的PixelData进行处理和转换

    转自:c# - C#用fo-dicom对CT图像的PixelData进行处理和转换 - IT工具网 对于某些测试,我试图操纵 PixelData以 dicom 格式存储的 CT 图像的元素,并使用 C ...

  10. RGB图像转换成YCbCr图像,rgb2ycbcr的使用,转换参数

    原理 YCbCr到RGB的转换 Y' = 0.257*R' + 0.504*G' + 0.098*B' + 16Cb' = -0.148*R' - 0.291*G' + 0.439*B' + 128C ...

最新文章

  1. ElasticSearch知识汇总
  2. 无缝融入 Kubernetes 生态 | 云原生网关支持 Ingress 资源
  3. 图像文字识别(三):Tesseract4.0训练字库,提高正确识别率
  4. PyTorch基础-猫狗分类实战-10
  5. 【潜龙勿用】中国制造业数字化转型大潮下的冷思考
  6. 软考,个人快速成长最好的投资
  7. Chrome插件管理器
  8. Linux内核生成版本号的一些研究
  9. !--more--搭建的博客设置主页内容高度
  10. SLA服务可用性怎么达到?
  11. 如何开发一款高大上的android应用的必备知识
  12. Eclipse官方汉化Zip包下载地址及安装方式
  13. 隧道监控计算机网络系统方案,高速公路隧道监控系统解决方案
  14. centos系统添加桌面图标
  15. 在成都Java培训班学习五个多月有用吗?
  16. 主板的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  17. VC驿站《VC++网络编程班》开课啦!
  18. 【springcloud】功能尝试(二)熔断器的三个功能
  19. 高考数学知识点:基本不等式(附习题)
  20. c语言拍手游戏,有趣的拍手游戏 | 浙江金华师范附属小学

热门文章

  1. Python数据分析pandas入门练习题(七)
  2. 服务器显示器无法调节分辨率,显示器无法设置分辨率怎么办
  3. TortoiseSVN安装及导入已有SVN仓库
  4. 什么是国外广告联盟?国外广告联盟怎么赚钱?为什么你做不赚钱?
  5. 电子白板计算机培训心得,电子白板培训个人心得体会范文
  6. 解决Word中插入表格超过页面边界问题
  7. css最后一行省略号,CSS怎么实现单行、多行文本溢出显示省略号
  8. android jni 读写sd卡,Android NDK的使用实例——增量更新实战
  9. The authentication type 10 is not supported
  10. CentOS7安装配置BareOS备份工具