当前位置:   article > 正文

使用matalab进行数字图像处理(一)_matlab图像处理

matlab图像处理

目录

一、图像文件导入失败 

二、图像类型转换

1、 RGB图像转换为灰度图像

1.1 使用rgb2gray函数

1.2 使用加权平均法

1.3 使用平均值法

2、RGB图像转换为索引图像

2.1 均值量化法

2.2 最小方差量化法

2.3 颜色表近似法

3、灰度图像转换为索引图像

4、索引图像转换为灰度图像

5、索引图像转换为RGB图像

6、二值图像的转换

7、数值矩阵转换为灰度图像


一、图像文件导入失败 

  1. 错误使用 imread>get_full_filename
  2. 文件 "ae6672b3d9e1c90170cfbbd6f1c7efc1.jpg" 不存
  3. 在。
  4. 出错 imread (第 371 行)
  5. fullname = get_full_filename(filename);

        在 MATLAB 中读取图像的路径可以使用 imread 函数,该函数的输入参数为图像文件的路径。例如,如果图像文件名为 image.jpg,并且该文件与 MATLAB 脚本文件在同一目录下,则可以使用以下代码读取该图像:

 img = imread('image.jpg');

        如果图像文件不在 MATLAB 脚本文件所在的目录下,则需要指定完整的路径。例如,如果图像文件在 D:\images 目录下,则可以使用以下代码读取该图像:

 img = imread('D:\images\image.jpg');

        在确认图像路径时,可以使用 exist 函数来检查文件是否存在。例如,如果要检查 image.jpg 文件是否存在,则可以使用以下代码:

  1.  if exist('image.jpg', 'file')
  2.     disp('File exists.');
  3. else
  4.     disp('File does not exist.');
  5. end

二、图像类型转换

1、 RGB图像转换为灰度图像

在Matlab中,将RGB图像转换为灰度图像有三种方法:

1.1 使用rgb2gray函数

        该函数将RGB图像转换为灰度图像,返回的灰度图像是一个二维矩阵。使用方法如下:

  1. rgb_img = imread('图像路径');
  2. gray_img = rgb2gray(rgb_img);
  3. figure;
  4. subplot(121);imshow(rgb_img);
  5. subplot(121);imshow(gray_img);

   其中,rgb_img是原始的RGB图像,gray_img是转换后的灰度图像。

1.2 使用加权平均法

        将RGB图像的每个像素的R、G、B三个分量按照一定的权重进行加权平均,得到一个灰度值。常用的权重是:0.2989、0.5870和0.1140。使用方法如下:

gray_img = 0.2989 * rgb_img(:,:,1) + 0.5870 * rgb_img(:,:,2) + 0.1140 * rgb_img(:,:,3);

   其中,rgb_img是原始的RGB图像,gray_img是转换后的灰度图像。

1.3 使用平均值法

        将RGB图像的每个像素的R、G、B三个分量取平均值,得到一个灰度值。使用方法如下:

 gray_img = (rgb_img(:,:,1) + rgb_img(:,:,2) + rgb_img(:,:,3)) / 3;

   其中,rgb_img是原始的RGB图像,gray_img是转换后的灰度图像。

2、RGB图像转换为索引图像

        在MATLAB中,将真彩色图像转换成为索引图像直接调用函数rgb2ind()。

        在早期的MATLAB版本中有大致四种转换方法: 直接法、均匀量化法、最小方差量化法和颜色表近似法,最新的MATLAB版中只有后三种转换方法。除此之外,在函数igb2ind ()还可以输入参数项dither option,其表示是否使用抖动。 

2.1 均值量化法

        用均值量化的方法将RGB图像转化为索引图像X,tol的范围为0.0到1.0,语法格式为:[X,map]=rgb2ind(RGB,tol)。

2.2 最小方差量化法

        使用最小方差量化方法将RGB图像转化为索引图像,map中包含至少n个颜色,语法格式为:[X,map]=rgb2ind(RGB,n)。

例:

  1. RGB = imread('图像路径');
  2. [X1,map1] = rgb2ind(RGB,64);
  3. [X2,map2] = rgb2ind(RGB,0.2);
  4. map3 = colorcube(128);
  5. X3 = rgbind(RGB,map3);
  6. figure;
  7. subplot(131);imshow(X1,map1);
  8. subplot(132);imshow(X2,map2);
  9. subplot(133);imshow(X3,map3);

2.3 颜色表近似法

在MATLAB中,使用颜色表近似法将RGB图像转换为索引图像的步骤如下:

        读取RGB图像文件,可以使用imread函数读取文件并获得RGB图像矩阵。

        创建颜色表。颜色表是一个M×3的矩阵,其中M是颜色表的长度,每一行包含一个颜色的RGB值。可以使用MATLAB内置的colormap函数创建一个颜色表。或者,可以使用自定义的颜色值创建一个颜色表。

  1. colormap(jet); % 使用jet颜色表
  2. colors = [0 0 0; 255 0 0; 0 255 0; 0 0 255; 255 255 255]; % 自定义颜色表
  3. colormap(colors);

         使用rgb2ind函数将RGB图像转换为索引图像。rgb2ind函数将RGB图像的每个像素值映射到颜色表上,找到最接近的颜色值作为该像素在索引图像中的值(即索引)。

[X, map] = rgb2ind(RGB, colormap);

        需要注意的是,颜色表的长度M决定了索引图像中每个像素的颜色种类数。颜色表中的颜色值越丰富,索引图像的颜色种类数越多,但同时也会增加计算量和存储空间。因此,在选择颜色表时需要根据实际需求进行折中考虑。

具体例子:

  1. RGB = imread('rgb_image.jpg');
  2. [X, map] = rgb2ind(RGB, colormap);
  3. % 自定义颜色表
  4. colors = [R, G, B]; % R、G、B分别代表不同颜色的RGB值
  5. % 创建颜色图对象
  6. colormap(colors);
  7. [X, map] = rgb2ind(RGB, colormap);
  8. imshow(X, map);

3、灰度图像转换为索引图像

        在MATLAB中,灰度图像是一个二维数组矩阵,而索引图像不仅包括一个二维的数组矩阵,还包括一个MX3的颜色映射表。所以要想将灰度图像转换成为索引图像,则必须生成对应的颜色映射表。在MATLAB中可以直接调用函数gray2ind()来实现图像转换其调用格式如下:
        [X,map]=gray2ind(l,n): 该函数是将灰度图像l转换为索引图像,其中l指的是原灰度图像n是灰度级数,默认值为64,[X,map]对应转换后的索引图像,map中对应的颜色值为颜色图gray(n)中的颜色值。
        [X,map]=gray2ind(BW,n): 该函数是将二值图像BW转换为索引图像,其中BW指的是二值图像,n是灰度级数,默认值为2,[X,mapl对应转换后的索引图像,map中对应的颜色值为颜色图gray(n)中的颜色值。二值图像实际上也是灰度图像,只是其灰度级为2 而已。

  1. I = imread('gray_image.jpg');
  2. I = rgb2gray(I); % 如果图像是彩色图像,需要先将其转换为灰度图像
  3. [X, map] = gray2ind(I, 8);
  4. imshow(X, map);

4、索引图像转换为灰度图像

        利用函数gra2ind( )可以将灰度图像转换为索引图像,同样,索引图像也是可以转换成为灰度图像的,在MATLAB中直接调用函数ind2gray()即可实现,其调用格式如下:
        I = ind2gray(X,map)        该函数是将具有颜色映射表map的索引图像转换为灰度图像,去除了索引图像中的颜色、饱和度信息,保留了图像的亮度信息。其中[X,map]对应索引图像,I表示转换后的灰度图像。输入图像的数据类型可以是double型或uint8型,但输出为double型。

  1. X = imread('index_image.png');
  2. I = ind2gray(X, map);
  3. imshow(I);

5、索引图像转换为RGB图像

       索引图像是一种把像素值直接作为RGB调色板下标的图像,把像素值“直接映射”为调色板数值。一幅索引图包含一个数据矩阵data和一个调色板矩阵map,数据矩阵可以是uint8,uint16或双精度类型的,而调色板矩阵则总是一个m×3的双精度矩阵。调色板通常与索引图像存储在一起,装载图像时,调色板将和图像一同自动装载。索引图像中每个像素的RGB颜色值都对应调色板中一个特定的颜色索引,这个索引就是该像素在调色板中的位置。因此,将索引图像转换为RGB图像就是将调色板中的索引映射回实际的颜色值。

        index2rgb函数的作用就是将索引图像和对应的颜色图map转换为RGB(真彩色)格式。这个函数会根据颜色图map中的颜色值和索引图像中的像素值,计算出每个像素在RGB颜色空间中的坐标,然后将这些坐标组合成RGB图像。这样,原本只有灰度和黑白像素的索引图像就被转换成了具有彩色信息的RGB图像。

具体来说,index2rgb函数的工作原理如下:

  1. 读取索引图像和颜色图map。
  2. 对于索引图像中的每个像素,根据其在颜色图map中的索引值,查找颜色图map中对应的RGB颜色值。
  3. 将查找到的RGB颜色值作为新的像素值输出,生成RGB图像。
  4. 输出生成的RGB图像。

        需要注意的是,index2rgb函数需要指定颜色图map作为输入参数,因为只有知道颜色图map中每种颜色的RGB值,才能将索引图像中的像素值转换为正确的颜色。

  1. X = imread('index_image.png');
  2. RGB = index2rgb(X, map, M);
  3. imshow(RGB);

6、二值图像的转换

       在MATLAB中,二值图像中的数据类型实际上是logical型, '0'代表黑色、’1’代表白色,所以二值图像实际上是一幅“黑白”图像。那么,将其他图像转换为二值图像,首先必须规定一个规则:将其他数组中什么数据变为’1’,什么数据变为’0’,。常用的方法是“阈值法”,它是确定一个阈值,小于阔值就取为’0’,其他的全部取为’1’。。在MATLAB中实现这一功能的函数为im2bw( ),其调用格式根据转换的原图像不同而各有差异。如果输入不是灰度图像,先将其转换为灰度图像,然后通过阈值法转换为二值图像。

  1. I = imread('图像路径');
  2. BW1 = im2bw(I,0.4);
  3. BW2 = im2bw(I,0.6);
  4. figure;
  5. subplot(131);imshow(I);
  6. subplot(132);imshow(BW2);
  7. subplot(133);imshow(BW2);

7、数值矩阵转换为灰度图像

        在MATLAB 中一个数据矩阵就相当于一幅数字图像,只是在数字图像中对应的数组元素必须在一定的取值范围,因此,只要将对应数据矩阵中的元素按一定规律进行转换,就可以将矩阵转换为图像了。在MATLAB中可以利用函数mat2gray( ),将一个数据矩阵转换为一幅灰度图像,其调用格式为:
        I = mat2gray(X,[xmin,xmax])        该函数是按照指定的取值区间[xmin,xmax]将数据矩阵X转换为灰度图像I,xmin对应灰度值0,即黑色,xmax对应灰度值1,即白色。数据矩阵中小于xmin的值取为0,大于xmax的值取为1。如果不指定取值区间[xmin,xmmax],即缺省情况下,将数据矩阵X中最小值设为xmin,最大值设为xmax。

  1. X = magic(256);
  2. %生成一个256*256的矩阵
  3. I = mat2gray(X);
  4. figure;imshow(I);

以上示例适用于较新的MATLAB版本,如R2019a或更高版本。如果使用的是旧版本的MATLAB,请查阅MATLAB官方文档以获取具体使用方法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/362971
推荐阅读
相关标签
  

闽ICP备14008679号