我是靠谱客的博主 认真夏天,最近开发中收集的这篇文章主要介绍MATLAB:图像半调转换(halftone)和抖动转换(dither)什么是半色调(halftone)抖动(dither)附:主要代码 MATLAB,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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: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所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部