小编近期为大家带来一套全面系统的MATLAB在图像处理中的应用。
灰度处理灰度化处理就是将一幅色彩图像转化为灰度图像的过程。彩色图像分为R,G,B三个分量,分别显示出红绿蓝等各种颜色,灰度化就是使彩色的R,G,B分量相等的过程。灰度值大的像素点比较亮(像素值最大为255,为白色),反之比较暗(像素最下为0,为黑色)。
X=imread('football.jpg'); %读取文件格式为.jpg,% 文件名为 football 的 RGB 图像的信息I=rgb2gray(X); %将 RGB 图像转换为灰度图像set(0,'defaultFigurePosition',[100,100,1000,500]); %修改图形图像位置的默认设置set(0,'defaultFigureColor', [1 1 1]); %修改图形背景颜色的设置subplot(121),imshow(X); %显示原 RGB 图像subplot(122),imshow(I); %显示转换后灰度图像
索引图像是一种把像素值直接作为RGB调色板下标的图像。索引图像可把像素值“直接映射”为调色板数值,原理就是矩阵 X 中的每个值,代表的是映射矩阵 map 的行,然后颜色既是map 中这一行的组合色调。MATLAB自带的woman信号构成的图像的像素索引矩阵和调色板矩阵。woman图像是一幅典型的索引图像。其图像矩阵大小为256×256,表示有65535个像素点构成。调色板大小为256×3,表示有256种颜色。我们看到图像索引矩阵的(1,1)单元的内容为124,也就是说这一点像素的颜色就是调色板矩阵的第125行所定义的颜色。可以看到调色板矩阵的第125行为[0.60536,0.60536,0.60536],表示RGB三个分量的比重都比较重且在图像中的地位相同。
索引图像
RGB = imread('football.jpg'); %读取图像信息[X1,map1]=rgb2ind(RGB,64); %将 RGB 图像转换成索引图像,颜色种数 N 是 64 种 [X2,map2]=rgb2ind(RGB,0.2); %将 RGB 图像转换成索引图像,颜色种数 N 是 216 种map3= colorcube(128); %创建一个指定颜色数目的 RGB 颜色映射表X3=rgb2ind(RGB,map3);set(0,'defaultFigurePosition',[100,100,1000,500]); %修改图形图像位置的默认设置set(0,'defaultFigureColor', [1 1 1]); %修改图形背景颜色的设置figure; subplot(131),imshow(X1,map1); %显示用最小方差法转换后索引图像subplot(132),imshow(X2,map2); %显示用均匀量化法转换后索引图像subplot(133),imshow(X3,map3); %显示用颜色近似法转换后索引图像
图像二值化
图像的二值化处理就是讲图像上的点的灰度置为0或255,也就是讲整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阀值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,特别是在实用的图像处理中,以二值图像处理实现而构成的系统是很多的,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像,这样子有利于再对图像做进一步处理时,图像的集合性质只与像素值为0或255的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。为了得到理想的二值图像,一般采用封闭、连通的边界定义不交叠的区域。所有灰度大于或等于阀值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者例外的物体区域。如果某特定物体在内部有均匀一致的灰度值,并且其处在一个具有其他等级灰度值的均匀背景下,使用阀值法就可以得到比较的分割效果。如果物体同背景的差别表现不在灰度值上(比如纹理不同),可以将这个差别特征转换为灰度的差别,然后利用阀值选取技术来分割该图像。动态调节阀值实现图像的二值化可动态观察其分割图像的具体结果。
I=imread('rice.png'); %读取文件格式为.jpg,BW1=im2bw(I,0.4); %将灰度图像转换为二值图像,level 值为 0.4BW2=im2bw(I,0.6); %将灰度图像转换为二值图像,level 值为 0.6set(0,'defaultFigurePosition',[100,100,1000,500]); %修改图形图像位置的默认设置set(0,'defaultFigureColor', [1 1 1]); %修改图形背景颜色的设置figure;subplot(131),imshow(I); %显示 level=0.4 转换后的二值图像subplot(132),imshow(BW1); %显示 level=0.5 转换后的二值图像subplot(133),imshow(BW2); %显示 level=0.6 转换后的二值图像
图像滤波
Y=filter2(h,x,’shape’)h为滤波器,x为要滤波的数据,将h放在x上移动进行模板滤波。 shape可取 full,same,valid (不写默认是same)。
I=imread('rice.png'); %读取文件格式为.jpg,H=[1 2 1;0 0 0;-1 -2 -1]; %设置 subol 算子X=filter2(H,I); %对灰度图像 G 进行 2 次滤波,实现边缘检测set(0,'defaultFigurePosition',[100,100,1000,500]); %修改图形图像位置的默认设置set(0,'defaultFigureColor', [1 1 1]); %修改图形背景颜色的设置figure,subplot(131),imshow(I);subplot(132),imshow(X,[]),colorbar(); %显示图像,并添加颜色条subplot(133),imshow(X,[]),colorbar('east');
二维图像纹理映射三维球体表面
纹理映射是一种将二维图像映射到三维图形表面的技术。这种技术通过转换颜色数据使二维图像与三维图形表面保持一致。在MATLAB中的纹理映射是利用双线性渐变算法来实现图像映射的。
close all; %关闭当前所有图形窗口clear all; %清空工作空间变量clc; %清屏%I=imread('testpat.png'); I=imread('football.jpg'); %读取图像信息[x,y,z]=sphere; %创建三个(N+1)×(N+1)的矩阵,% 使得 surf(X,Y,Z)建立一个球体,缺省时 N 取 20set(0,'defaultFigurePosition',[100,100,1000,400]); %修改图形图像位置的默认设置set(0,'defaultFigureColor', [1 1 1]) %修改图形背景颜色的设置figure,subplot(121),warp(I); %显示图像映射到矩形平面subplot(122),warp(x,y,z,I); %将二维图像纹理映射三维球体表面grid; %建立网格