matlab-2

学校数字水印课笔记——matlab使用小记(二)
图像类型转换和颜色模型转换

基础知识

matleb中,图像转换关系可以用下图表示。本次实验主要涉及的是下面有标号的几种。

image-20220407085028888

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

image-20220407085137810

灰度图像二值化方法

image-20220407085311966

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

image-20220407085607394

如何确定阈值

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

image-20220407085815283

如果波峰和波谷交替出现,那么我们应该将阈值放在主要的波峰和波谷之间。

利用matlab的imhist.m函数可以方便地画出一幅灰度图像的灰度直方图。但是说我缺少toolbox,结果下载页下载不了。。。只能重装,真实糟心

使用下面代码绘制

1
2
rgb = imread("E:\lena.bmp");
imhist(rgb)

image-20220407105621922

不同数字图像文件格式转换

RGB和索引图象之间的转换

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

image-20220407105814908

(看到这里想到,对于一个读取bmp图像的文件,如果fuzz改掉headsize部分,是否可能造成指针越界,造成越界访问?)

常见的RGB格式图像是PNG。

我们接下来尝试转换。将png图像转换为bmp图像

1
2
3
4
5
6
7
8
9
rgb = imread("E:\onion.png");
figure(1);
[data,map] = rgb2ind(rgb,16);
image(data),colormap(map);
title("matlab");

figure(2);
imshow(rgb);
title("RGB");

image-20220407111023832

可以看到图像质量发生了变化。位图参数还可以调整为128,图像清晰度会提高。

转换为灰度图像即为。这里推断它采用能尽可能分辨的多图像的,上面提到的灰度图像的识别方法。

image-20220407111326390

图像读写函数完成转换

image-20220407112731389

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

image-20220407112759580

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

1
2
3
4
5
6
# 将jpg转换为rgb
RGB=imread('lenna.jpg','jpg');
HSV=rgb2hsv(RGB);
subplot(121);imshow(RGB);title('原图像');
subplot(122);imshow(HSV);title('变换后的图像');

image-20220407113242114

相同的方法,可以把图片转换为hsv格式。

1
2
3
4
rgb = imread("E:\score.jpg");
HSV = rgb2hsv(rgb);
subplot(121);imshow(rgb);title('original');
subplot(122);imshow(HSV);title('changed');

image-20220407113802106

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

文章目录
  1. 1. 基础知识
    1. 1.1. 灰度图像二值化方法
      1. 1.1.1. 如何确定阈值
  2. 2. 不同数字图像文件格式转换
    1. 2.1. RGB和索引图象之间的转换
    2. 2.2. 图像读写函数完成转换
|