matlab图像处理

1
2
3
4
5
6
7
8
彩色图像:每个像素由R、G、B三个分量表示,每个通道取值范围0~255。数据类型一般为8位无符号整形。

灰度图像:每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度。

二值图像(黑白图像):每个像素点只有两种可能,01.0代表黑色,1代表白色。数据类型通常为1个二进制位。

索引图像:类似于查字典,为了解决彩色图像消耗空间大的问题,一般应用于色彩构成比较简单的场景。

  • 彩色图像(color image):每个像素通常是由红(R)、绿(G)、蓝(B)三个分量来表示的,分量介于(0,255)。RGB图像与索引图像一样都可以用来表示彩色图像。与索引图像一样,它分别用红(R)、绿(G)、蓝(B)三原色的组合来表示每个像素的颜色。但与索引图像不同的是,RGB图像每一个像素的颜色值(由RGB三原色表示)直接存放在图像矩阵中,由于每一像素的颜色需由R、G、B三个分量来表示,M、N分别表示图像的行列数,三个M x N的二维矩阵分别表示各个像素的R、G、B三个颜色分量。RGB图像的数据类型一般为8位无符号整形,通常用于表示和存放真彩色图像,当然也可以存放灰度图像。
  • 灰度图像(gray image)是每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;但是,灰度图像在黑色与白色之间还有许多级的颜色深度。灰度图像经常是在单个电磁波频谱如可见光内测量每个像素的亮度得到的,用于显示的灰度图像通常用每个采样像素8位的非线性尺度来保存,这样可以有256级灰度(如果用16位,则有65536级)。
  • 二值图像(binary image),即一幅二值图像的二维矩阵仅由0、1两个值构成,“0”代表黑色,“1”代白色。由于每一像素(矩阵中每一元素)取值仅有0、1两种可能,所以计算机中二值图像的数据类型通常为1个二进制位。二值图像通常用于文字、线条图的扫描识别(OCR)和掩膜图像的存储。
  • 索引图像,即它的文件结构比较复杂,除了存放图像的二维矩阵外,还包括一个称之为颜色索引矩阵MAP的二维数组。MAP的大小由存放图像的矩阵元素值域决定,如矩阵元素值域为[0,255],则MAP矩阵的大小为256Ⅹ3,用MAP=[RGB]表示。MAP中每一行的三个元素分别指定该行对应颜色的红、绿、蓝单色值,MAP中每一行对应图像矩阵像素的一个灰度值,如某一像素的灰度值为64,则该像素就与MAP中的第64行建立了映射关系,该像素在屏幕上的实际颜色由第64行的[RGB]组合决定。也就是说,图像在屏幕上显示时,每一像素的颜色由存放在矩阵中该像素的灰度值作为索引通过检索颜色索引矩阵MAP得到。索引图像的数据类型一般为8位无符号整形(int8),相应索引矩阵MAP的大小为256Ⅹ3,因此一般索引图像只能同时显示256种颜色,但通过改变索引矩阵,颜色的类型可以调整。索引图像的数据类型也可采用双精度浮点型(double)。索引图像一般用于存放色彩要求比较简单的图像,如Windows中色彩构成比较简单的壁纸多采用索引图像存放,如果图像的色彩比较复杂,就要用到RGB真彩色图像。

判断是什么图片:

右击图片属性,摘要,点击详细属性,里面有位深度一项。如果是RGB图,位深度是24;如果是灰度和索引图,位深度是8;灰度是白灰黑表示的图,索引图有可能是彩色的,但也是8位深。


rgb图像转为灰度图像

matlab中图像处理的一些简单函数

  1. imread()
1
2
3
4
imread()用于读入各种图像文件
语法格式:
[X,MAP]=imread(‘filename’,‘fmt’)
X,MAP分别为读出的图像数据和颜色表数据,fmt为图像的格式,filename为读取的图像文件(可以加上文件的路径)
  1. imwrite()
1
2
3
4
imwrite() 用于输出图像
语法格式:
imwrite(X,map,filename,fmt)
按照fmt指定的格式将图像数据矩阵X和调色板map写入文件filename
  1. imfinfo()

    1
    2
    3
    4
    imfinfo用于读取图像文件的有关信息
    语法格式:
    imfinfo(filename,fmt)
    imfinfo函数返回一个结构info,它反映了该图像的各方面信息,其主要数据包括:文件名(路径)、文件格式、文件格式版本号、文件的修改时间、文件的大小、文件的长度、文件的宽度、每个像素的位数、图像的类型等。

    image-20230504190300316

  2. imshow()

    1
    2
    3
    4
    imshow函数是最常用的显示各种图像的函数
    语法如下:
    imshow(X,map)
    X是图像数据矩阵,map是其对应的颜色矩阵,若进行图像处理后不知道图像数据的值域可以用[]代替map
    • 二进制(二值)图像显示方法,在MATLAB中一幅二值图像是uint8或双精度的,该矩阵仅包含0和1。如果希望工具箱中的函数能将图像理解为二进制的,那么所有数据都要是逻辑数据,必须对其进行设置(将所有数据标志均设置on).可以对数据利用“~”取反操作实现图像逆转即黑白反色。

    • 灰度图像的显示方法,正常情况下无需指定灰度图像的调色板格式。可以是使用imshow函数指定要显示灰度级数目,格式 imshow(I,n),n为指定的灰度级数目。用户也可以指定数据的范围,格式imshow(I,[low high])其中low 和high参数分别为数据数组的最小值和最大值。如果为空矩阵([]),那么imshow函数将自动进行数据标度

    • 索引图像,imshow(x,map)对于x的每个个像素,imshow显示存储map中相应行的颜色

    • RGB图像的显示,它直接对颜色进行描述而不使用调色板,格式imshow(RGB)。RGB(:,:,1) RGB(:,:,2)   RGB(:,:,3)

    • 特殊显示,如多幅图像的显示,需要显示多幅图像时。可以使用figure语句,它的功能就是重新打开一个图像显示窗口

      例:

      1
      2
      3
      4
      I=imread(‘小丑.tif’);
      Imshow(I);
      J=imread(‘sunny.tif’);
      figure,imshow(J);

      image-20230504192518215

    • 也可以将多幅图像显示在同一个单独的图像窗口中

      subplot(m,n,p)这种格式将图形窗口划分为m*n个矩形显示区域并激活第p个(先从左往右,再从上往下)显示区域。

      有两种方法:

      法一:联合imshowsubplot函数

      1
      2
      >> subplot(1,2,1),imshow(S)
      >> subplot(1,2,2),imshow(I)

      image-20230504193358789

      法二:联合使用subimage函数和subplot函数

      1
      2
      subplot(1,2,1),subimage(S)
      subplot(1,2,2),subimage(I)

      image-20230504193621537

  3. imhist()

    1
    2
    3
    4
    5
    6
    7
    imhist函数来计算和显示图像的直方图
    语法格式:
    imhist(I,n)
    imhist(X,map)

    imhist(I,n)计算和显示灰度图像I的直方图,n为指定的灰度级数目,默认值为256
    imhist(X,map)计算和显示索引色图像X的直方图,map为调色板

    image-20230504194235956

  4. imadjust()

    对比度增强

    如果原图像f(x,y)的灰度范围是[m,M],我们希望调整后的图像g(x,y)的灰度范围是[n,N],那么下述变换, ,就可以实现这一要求

    1
    2
    3
    4
    5
    6
    imadjust函数,可以实现上述的线性变换对比度增强
    语法格式:
    J = imadjust(I,[low_in high_in],[low_out high_out])
    返回图像I经过直方图调整后的图像J


    eg:

    1
    2
    J = imadjust(S,[0.3 0.7],[]);
    imshow(S),figure, imshow(J)

    image-20230504195401762

  5. im2bw()

    将灰度图像转换为二值图像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
BW = im2bw(I,level)

  将灰度图像 I 转换为二进制图像。输出图像 BW 将输入图像中亮度值大于 level 的像素替换为值1 (白色),其他替换为值0(黑色)。你指定 level 在 [0,1]之间,不用管输入图像的等级。函数graythresh 能用来自动计算变量 level 。如果你不指定 level ,im2bw 使用 0.5


BW = im2bw(X,map,level)

将颜色表为 map 的索引图像 X 转换为二进制图像。


BW = im2bw(RGB,level)

将 RGB 真彩图像转换为二进制图像。Level是归一化的阈值,值域为[01]。Level可以由函数graythresh(I)来计算。
【如果输入图像不是灰度图像, im2bw 首先将图像转换为灰度图像,然后通过阈值将灰度图像转换成二进制图像。】
函数名 功能描述
Imabsdiff 两幅图像的绝对差值
Imadd 两幅图像的加法
Imcomplement 补足一幅图像
Imdivide 两幅图像的除法
Imlincomb 计算两幅图像的线性组合
Immultiply 两幅图像的乘法
imsubtract 两幅图像的减法
  1. imadd()

    进行两幅图像的加法,或者给一幅图像加上一个常数

    imadd函数将某一幅输入图像的每一个像素值与另一幅图像相应的像素值相加,返回相应的像素值之和作为输出图像

    1
    2
    3
    %语法格式如下:
    Z = imadd(X,Y)
    %X和Y表示需要相加的两幅图像,返回值Z表示得到的加法操作结果

    eg:

    1
    2
    3
    4
    5
    6
    7
    8
    Cman=imread('cameraman.tif');
    HCman=imadd(Cman,50);
    LCman=imadd(Cman,-50);

    figure;
    subplot(1,3,1),imshow(LCman);
    subplot(1,3,2),imshow(Cman);
    subplot(1,3,3),imshow(HCman);

    结果展示:

    image-20230508172944715

  2. imsubtract()

    imsubtract函数可以将一幅图像从另一幅图像中减去,或者从一幅图像中减去一个常数

    imsubtract函数将一幅输入图像的像素值从另一幅输入图像相应的像素值中减去,再将这个结果作为输出图像相应的像素值

1
2
3
%语法格式:
Z = imsubtract(X,Y);
%Z是X-Y操作的结果
  1. strel()

    structuring element

    运用各种形状和大小构造元素,创建由指定形状shape对应的结构元素。用于膨胀腐蚀及开闭运算等操作的结构元素对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
%基本语法:
SE = strel(shape, parameters)
shape 是指定希望形状的字符串,其中shape的种类有
'arbitrary','pair','diamond','periodicline','disk','rectangle','line','square','octagon'
参数parameters是指定形状信息的一系列参数,一般控制SE的大小


SE = strel('arbitrary', NHOOD)
创建一个任意形状的结构元素,NHOOD是由01组成的矩阵,用于指定形状可以用se=strel(NHOOD)简化

创建一个指定领域的平面结构化元素。1的位置定义了领域的形态学操作。NHOOD的中心就是它的中心元素,位置在FLOOR((SIZE(NHOOD) + 1)/2)。你也可以忽略参数串'arbitrary'而只使用STREL(NHOOD).

SE = strel('arbitrary', NHOOD, HEIGHT)
创建一个指定领域的非平面结构化元素。HEIGHT是一个矩阵,大小和NHOOD相同,他指定了NHOOD中任何非零元素的高度值。HEIGHT必须是实有限值。你也可以忽略参数串'arbitrary'而只使用STREL(NHOOD,HEIGHT).
creates a nonflat, ball-shaped structuring element (actually an ellipsoid) whose radius in the X-Y plane is R and whose height is H.
When N is greater than 0, the ball-shaped structuring element is approximated by a sequence of Nnonflat, line-shaped structuring elements. When N equals 0, no approximation is used, and the structuring element members consist of all pixels whose centers are no greater than R away from the origin.

例子:

se1 = strel('square',6) % 创建6*6的正方形



SE = strel('line', LEN, DEG) 创建一个平坦的线型结构,LEN长度,DEG角度

se2 = strel('line',10,45) % 创建直线长度10,角度45



SE = strel('disk', R, N)

创建一个指定半径R的平面圆盘形的结构元素。这里R必须是非负整数. N须是0, 4, 6, 8.当N大于0时,圆盘形结构元素由一组N(或N+2)个周期线型( periodic-line )结构元素来近似。当N等于0时,不使用近似,即结构元素的所有像素是由到中心像素距离小于等于R的像素组成。N可以被忽略,此时缺省值是4

注: 形态学操作在N>0情况下要快于N=0的情形。

se3 = strel('disk',15) % 创建圆盘半径15



SE = STREL('ball',R,H,N) 创建一个空间椭球状的结构元素,其X-Y平面半径为R,高度为H。R必须为非负整数,H是一个实数。N必须为一个非负偶数,当N>0时此球形结构元素由一系列空间线段结构元素来近似;当N=0时不需要近似,结构化元素的成员由所有中心距圆点>R的元素组成,相应的高度值可由R/H指定的椭球中提取。如果N未指定,缺省值8,并且。注: 使用球体近似的形态学操作N>0的情况要比N=0的情况快许多。
se4 = strel('ball',15,5)

% 创建椭圆体,半径15,高度5



SE = strel('octagon', R) 创建一个平坦的八边形结构元素,R是从结构元素原点到八边形边的距离,沿水平轴和垂直轴的度量,R必须是3的非负倍数



SE = strel('pair', OFFSET) 创建一个包含两个成员的平坦结构元素,一个成员在原点,另一个成员由向量OFFSET表示,该向量必须是一个两元素的整数向量



SE = strel('diamond', R)
创建一个指定大小R平面钻石形状的结构化元素。R是从结构化元素原点到其点的距离,必须为非负整数。


SE = strel('periodicline', P, V) 创建一个包含有2*P+1个成员的平坦元素,其中V是一个两元素向量,它包含有整数值的行和列的偏移,一个元素在原点,另一个位于 1*V, -1*V, 2*V, -2*V, ..., P*V, -P*V.



SE = strel('rectangle', MN) 创建一个平坦的矩形结构,MN指定大小 SE = strel('square', W) 创建一个方形的结构元素,边长为N个像素



Nhood=getnhood(se)%获得se邻域

两幅图像进行乘法运算可以实现掩模操作,即屏蔽掉图像的某些部分。一幅图像乘以一个常数通常被称为缩放

  1. immulitply(X,Y)

将两幅图像相应的像素值进行元素对元素的乘法操作(MATLAB点乘),并将乘法的运算结果作为输出图形相应的像素值

1
2
3
%语法格式:
Z = immulitply(X,Y)

  1. ind2gray()

    索引图像转换为灰度图像

    1
    2
    3
    4
    %语法格式
    I = ind2gray(X,cmap)
    %将X带有颜色图 的索引图像转换cmap为灰度图像I,
    %该 ind2gray功能在保持亮度的同时从输入图像中删除色相和饱和度信息。

    eg:

除法运算可用于校正成像设备的非线性影响,这在特殊形态的图像(如断层扫描等医学图像)处理中常常用到。图像除法也可以用来检测两幅图像间的区别,但是除法操作给出的是相应像素值的变化比率,而不是每个像素的绝对差异,因而图像除法也称为比率变换。

  1. imdivide()

    imdivide函数对两幅输入图像的所有相应像素执行元素对元素的除法操作(点除),并将得到的结果作为输出图像的相应像素值

    1
    2
    3
    4
    %语法格式
    Z = imdivide(X,Y)
    %Z=X/Y


matlab图像处理
http://example.com/2023/05/04/matlab图像处理/
作者
YiZhi_w
发布于
2023年5月4日
许可协议