MATLAB学习笔记(五、图像处理——上)

一、Introduction to digital image

1.RGB

red、green、blue(红绿蓝)

2.三种图

(1)二值图(Binary Image)
只有black-white两种颜色
在这里插入图片描述
(2)灰度图(Greyscale Image)
下图右边每个数值其实就是一个灰度级数,并且是每个pixel(像素)都有一个灰度级数。
一般的灰度图为8-bit,那么灰度级就有28-1 = 255(联系下图理解,灰度值都是在0~255)
浅红色文字:灰度级数越高,图像越亮
下图的矩阵中灰度级数 99 90 67 37就属于比较暗的区域了
在这里插入图片描述
(3)Color Image
彩色图像其实就是RGB三种单色图的叠加
在这里插入图片描述

二、Read and Show images

三、Image arithmetic

图像有很多运算

1.图像乘法运算 : immultiply()

Z = immultiply(X,Y) :有以下两种用法

(1)当Y是另一幅图(或者自身)时:
Z = immultiply(X,Y) 可以进行图像乘法(相当于X .* Y
但是要注意!若图像是 uint8 类型(我们常见都是这种8比特图),进行自乘时需要进行位数拓展
原因:如果不转换,8位 x 8位 会 溢出 (溢出就达到饱和——全亮了)
措施:转换为16位或者64位等更高位

Y16 = uint16(Y);   % 若是自乘则为 X16 = uint16(X);
Y64 = uint64(Y);   % 若是自乘则为 X64 = uint64(X);

实例:

绘出图像——
在这里插入图片描述
代码如下:

I = imread('MultiplyImageExample.png');   % 取原图
subplot(2,2,1);
imshow(I);
title('原图');

subplot(2,2,2);
I16 = uint16(I);         % 转换为16位
J = immultiply(I16, I16);
imshow(J);
title('16 x 16 正常')

subplot(2,2,3)
I64 = im2double(I);      % 转换为64位
K = immultiply(I64, I64);
imshow(K);
title('64 x 64 正常');

subplot(2,2,4);
Z = immultiply(I, I);
imshow(Z);
title('8 x 8 溢出')

tips: 自乘之前图像的灰度值为40-255,自乘之后变为了1600-41416,这大大拉大了亮暗图像点之间的差距,即提高了对比度(是的,还能提高对比度…)。

(2)Y是数值时,如等于 k:
k > 1时:提高亮度
k < 1时:降低亮度

有代码有图有真相——
在这里插入图片描述
tips:
图像扩大像素,使得整幅图像变得明亮,但是对比度并没有提高,缩小像素使得变暗;
同样要注意溢出问题,若是uint8的图,任意像素值不能超过255。

2.图像加法运算 : imadd()

图像加法运算就是将两个图像叠加。

imadd(I, J): 有以下两种用法
同样要注意溢出问题,若是uint8的图,任意像素值不能超过255。

(1)当J是常数,如 J=50
就是给图像 I 的每个像素值 + 50
(2)当J是另一幅图(或者自身)时:
就是将图像 I 和图像 J 的像素值相加
在这里插入图片描述

3.Histogram Equalization : imhist()、imhisteq()

有两个函数需要注意:
(1) imhist(image): 将图像image的像素用直方图在x:0~255范围内绘制,y轴显示的是像素个数
(2) imhisteq(image) : 传回一个图像image的直方图均衡后的值,可以直接用hist(histeq(image))来绘制均衡后的直方图,或者用一个变量 Y 存起,后面也可hist(Y)间接达到同样目的。

话不多说,上代码和图——
在这里插入图片描述

tips:
我们看到,直方图均衡化后,较高灰度值的被拉的更高(亮的更亮),较低灰度值的被拉得更低(暗的更暗),即对比度提升

4.Image Rotation : rotate()、imrotate()

图像旋转,是仿射变换的一种。

rotate(h,direction,alpha): 将图形对象 h 顺时针旋转 alpha 度。指定 h 为曲面、补片、线条、文本或图像对象。direction 是一个二元素或三元素向量,它与旋转轴原点共同确定旋转轴。
imrotate(h,direction,alpha): 将图形对象 h 逆时针旋转 alpha 度。指定 h 为曲面、补片、线条、文本或图像对象。direction 是一个二元素或三元素向量,它与旋转轴原点共同确定旋转轴。
注意:旋转轴的默认原点是图框中心。该点未必是坐标区的原点。
tips: (1)二维图像旋转比较简单,三维图像的 direction 则需要用矩阵表示,可以参考该链接 https://ww2.mathworks.cn/help/matlab/ref/rotate.html
(2)下面imrotate(I, 35, 'bilinear')的操作是将 图像I 逆时针旋转35° 并将变换后的图像命名为 bilinear.

在这里插入图片描述

5.Write Image : imwrite()

用于存储文件,就可以不手动处理;了
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43469047/article/details/86695547