学校数字水印课笔记——matlab使用小记(二)
图像类型转换和颜色模型转换
基础知识
matleb中,图像转换关系可以用下图表示。本次实验主要涉及的是下面有标号的几种。

一般而言,有以下几种常见的图像处理函数

灰度图像二值化方法

从伪代码可以看出原理其实很简单。就是根据阈值设置某个像素点取值为0或者1。matlan中的im2bw中就包含一个阈值参数。这里没有做实验,直接复制了老师的图。

如何确定阈值
根据图像全局灰度值确定。从本质上而言,根本思想就是选取的阈值要尽量能区分大部分颜色。这里选在两个阈值之间就使得结果中一半全白,一半全黑。就能够区分两者。反之就会得到全白或者全黑,无法区分两者。

如果波峰和波谷交替出现,那么我们应该将阈值放在主要的波峰和波谷之间。
利用matlab的imhist.m函数可以方便地画出一幅灰度图像的灰度直方图。但是说我缺少toolbox,结果下载页下载不了。。。只能重装,真实糟心
使用下面代码绘制
1  | rgb = imread("E:\lena.bmp");  | 

不同数字图像文件格式转换
RGB和索引图象之间的转换
回顾一下索引图象和RGB图像的区别。RGB图像每一个像素点都有rgb三个分量,而索引图象每一个点是一个下标,下标代表调色板中对应颜色的位置。调色板是一些预设好的颜色组合。我们可以把RGB图像转换为n=16或者n=128的索引图象。例如bmp图像就是一种调色板图像。下面是bmp图像的文件格式。

(看到这里想到,对于一个读取bmp图像的文件,如果fuzz改掉headsize部分,是否可能造成指针越界,造成越界访问?)
常见的RGB格式图像是PNG。
我们接下来尝试转换。将png图像转换为bmp图像
1  | rgb = imread("E:\onion.png");  | 

可以看到图像质量发生了变化。位图参数还可以调整为128,图像清晰度会提高。
转换为灰度图像即为。这里推断它采用能尽可能分辨的多图像的,上面提到的灰度图像的识别方法。

图像读写函数完成转换

但是文件读写的方法读取图象是有限制的。只能在相同格式文件之间转换。如果需要转换为不同的模型,需要用下面的函数。

注意:imshow本身基于RGB模型观察图像。因此在用其他模型转换后可能导致图像变得很奇怪。例如下图
1  | # 将jpg转换为rgb  | 

相同的方法,可以把图片转换为hsv格式。
1  | rgb = imread("E:\score.jpg");  | 

matlab怎样显示hsv格式的图片?应该是无法显示的。我们能做的是先把图像变成hsv格式的,然后再把hsv图片转换回来,这样能修改图片的饱和度等。