学校数字水印课笔记——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图片转换回来,这样能修改图片的饱和度等。