本文作为本科系统学习数字图像处理的一个开篇吧,之前间断的学习了一些FPGA和matlab的相关知识,正逢校内开设这个课程,近期就更新下关于数字图像的知识吧,由于博主今年要准备考研,所以花在博客上的时间会比较少。
数字图像的操作
1.灰度或者二值转换为索引图像
gray2ind
将灰度或二进制图像转换为索引图像
[X,cmap] = gray2ind(I,c)
[X,cmap] = gray2ind(BW,c)
解释:
I— 灰度图像—数字数组
BW— 二进制图像—数字数组
c— 颜色图颜色的数量—正整数
下面把图像转换为128,64,16灰度级的索引图片
clc; clear all;close all; img=imread('../img1.jpg'); img=rgb2gray(img); figure; imshow(img); title('original'); [x,map]=gray2ind(img,128); figure; imshow(x,map); title('gray_128'); %%%%%%%%%%%重复操作%%%%%%%%%%%%%% [x1,map1]=gray2ind(img,64); figure; imshow(x1,map1); title('gray_64'); [x2,map2]=gray2ind(img,16); figure; imshow(x2,map2); title('gray_16');
效果
在灰度级不断减小时,图片逐渐有失真的趋势
2.索引图像转换为灰度图像
ind2gray
I = ind2gray(X,cmap)
I = ind2gray(X,cmap) 将X带有颜色图 的索引图像转换cmap为灰度图像I。该 ind2gray功能在保持亮度的同时从输入图像中删除色相和饱和度信息。
X— 索引图像----数字数组
cmap— 颜色图----c-by-3数字数组
clc; clear all;close all; load trees img = ind2gray(X,map); figure,imshow(X,map); title('orginal'); figure,imshow(img); title('gray_image');
效果
3.RGB图像转换为灰度图像
rgb2gray
将 RGB 图像或颜色图转换为灰度图
语法:
I = rgb2gray(RGB)
newmap = rgb2gray(map)
clc; clear all;close all; img=imread('../img1.jpg'); gray=rgb2gray(img); subplot(1,2,1);imshow(img);title('original'); subplot(1,2,2);imshow(gray);title('gray');
4.RGB图像转换为索引图像
rgb2ind
rgb2ind函数对于减少RGB图像的颜色数是非常有用的。
将真彩色图像转换为索引图像。在matlab命令窗口中键入doc rgb2ind或help rgb2ind可以获得更多关于该函数的帮助信息。
该函数将真彩色图像转换为索引图像, 由于RGB图像一个像素占用三个字节, 分别存储R、G、B分量的值,而索引图像一个像素占用一个字节。在将灰度图像转换为索引图像时, 是从3个字节映射到一个字节的关系。 通常有以下三种算法:
gray = (R + G + B) / 3,即求得R、G、B三个分量平均值作为索引图像中对应像素点的像素值。
gray = min(R, G, B),即以R、G、B三个中最小分量作为索引图像对应像素点的像素值。
gray = 0.3 * R + 0.59 * G + 0.11 * B(或者表示为:gray = ((77 * R + 151 * G + 28 * B) >> 8))
调用格式:
[X,map] = rgb2ind(RGB, n)
使用第二种算法把真彩色图像转换为索引图像,其中n指定map中颜色项数, n最大不能超过65536。
返回值中map即索引图像的调色板。
X = rgb2ind(RGB, map)
使用调色板map将真彩色图像转换为索引图像,即在调色板中找到与真彩色图像颜色值最接近的颜色作为转换后的索引图像的像素值。map中颜色项数(即size(map, 1))不能超过65536。
[X,map] = rgb2ind(RGB, tol)
利用第一种算法把真彩色图像转换为索引图像, map中最多包含(floor(1/tol)+1)^3种颜色, tol必须是介于0.0和1.0之间的数。
[…] = rgb2ind(…, dither_option)
clc; clear all;close all; img=imread('../lena.jpg'); subplot(2,2,1);imshow(img);title('original'); [x,map]=rgb2ind(img,16); subplot(2,2,2);imshow(x,map);title('最小方差量化抖动'); [x1,map1]=rgb2ind(img,0.5); subplot(2,2,3);imshow(x,map);title('均值化抖动处理'); [x2,map2]=rgb2ind(img,16,'nodither'); subplot(2,2,4);imshow(x,map);title('不抖动');
效果
5.索引图像转换为RGB图像
ind2rgb
和ind2gray类似
clc; clear all;close all; load trees img = ind2rgb(X,map); figure,imshow(X,map); title('orginal'); figure,imshow(img); title('rgb_image');
6.通过阈值转换为二值图像
im2bw
im2bw使用阈值(threshold)变换法把灰度图像(grayscale image)转换成二值图像。所谓二值图像, 一般意义上是指只有纯黑(0)、纯白(255)两种颜色的图像。 当然, 也可以是其他任意两种颜色的组合。
语法
BW = im2bw(I, level)
BW = im2bw(X, map, level)
BW = im2bw(RGB, level)
其中level就是设置阈值的。level取值范围[0, 1]
clc; clear all;close all; load trees img = im2bw(X,map,0.3); subplot(2,2,1);imshow(X,map);title('orginal'); subplot(2,2,2);imshow(img);title('bw_ind'); rgb=imread('../img1.jpg'); rgb_bw = im2bw(rgb,0.3); subplot(2,2,3);imshow(rgb);title('orginal'); subplot(2,2,4);imshow(rgb_bw);title('bw_rgb');
效果