全文框架
一、基础操作
1.1 基本函数
部分函数的笔记:
Mean():
M = mean(A)
返回A的平均值,A为向量时返回所有值的平均值,A为矩阵时返回行向量,其中每一个值为该列的平均值。因此求矩阵所有元素平均值时要用两次mean()。
Imadjust():
J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma)
此函数可以用于调整对比度,原理是将图片I的值映射到图片J,即把low_in到high_in的值映射到low_out上。若此参数省略,则默认使图像1%数据饱和至最低和最高亮度。
当imadjust(I,[0,1],[1,0])时取反,与imcomplement()作用相同。
参数Gamma:用于描述I与J的函数形状,省略即为线性映射。
因此,可以从函数中看出,y<1 brighter, y>1 darker
注意,I要为uint8,不能为double!
Mat2gray():
I =mat2gray(A, [amin amax])
把矩阵A转化为灰度图,将amin和amax映射到图片I的0到1,可用于增强对比度。
Imcrop():
I2 = imcrop(I,rect)
剪切图片I,rect为矩阵[xmin ymin width height],返回剪切后的图片I2
注意事项
1.图像相加可以减少噪声,也可以用于增加曝光度(high dynamic range image)
2.图像相减可以用于运动检测
3.在图像显示的时候,要先调成uint8的类型,否则无法正常显示。注意,对图像的操作大部分基于double格式的。
1.2 色彩空间
色彩空间用数学方式来描述颜色集合。常见的3 个基本色彩模型是RGB , CMYK和YUV。在YUV 家族中,YCbCr 是在计算机系统中应用最多的成员,其应用领域很广泛,JPEG、MPEG均采用此格式。
这里只介绍YCbCr:
YCbCr其中Y是指亮度分量,Cb指蓝色色度分量,而Cr指红色色度分量。人的肉眼对视频的Y分量更敏感,因此在通过对色度分量进行子采样来减 少色度分量后,肉眼将察觉不到的图像质量的变化。
处理彩色图片时,常见的方法是提取其Y分量,因Y分量包含图片大部分特征,这样能更好对其进行滤波等操作,处理完Y分量后再组合成彩色图片。
提取Y分量代码:
J=rgb2ycbcr(I);
K=J(:,:,1); %1是Y,2是Cb,3是Cr
1.3 灰度变换
灰度变换指逐点改变源图像像素灰度值的方法,以改善画质。
这里介绍直方图均衡:
直方图均衡化(Histogram Equalization) 又称直方图平坦化,实质上是对图像进行非线性拉伸,重新分配图像象元值,使一定灰度范围内象元值的数量大致相等。对像素个数多的灰度级进行展宽,对像素少的灰度级缩减,这样,输入图像的每一灰度级都有相同像素点数目,即输出的图像的直方图是平的。
这样,原来直方图中间的峰顶部分对比度得到增强,而两侧的谷底部分对比度降低,如果输出数据分段值较小的话,对比度会不明显。
相关函数:
imhist( i ,n):
直接显示图像i的灰度直方图(默认为255个灰度级); n为指定灰度级显示直方图;
J=histeq(I,n):
I为输入的原图像,J为直方图均衡化后得到的图像,n为均衡化后的灰度级数,默认值为64
效果:
1.4 色彩平衡算法
目的:
人眼能从变化的光照环境和成像条件下获取物体表面颜色,但成像设备不具有这样的调节功能,不同的光照环境会导致采集的图像颜色与真实颜色存在一定程度的偏差,需要选择合适的颜色平衡(校正)算法,消除光照环境对颜色显现的影响。消除图像中环境光的影响,获得原始场景图像。
a.GrayWorld 算法:
对于一幅有着大量色彩变化的图像,,三个分量的平均值趋于同一灰度值。从物理意义上讲,灰色世界法假设自然界景物对于光线的平均反射的均值在总体上是个定值,这个定值近似地为“灰色”
grayworld解释:
grayworld代码:
function y=GrayWorld(Image)
%RGB图像为n*m*3的数组,表示尺寸为n*m个像素,其中每个像素由RGB三个分量构成。(:,:,1)表示遍历xy,提取红色分量
r=Image(:,:,1);
g=Image(:,:,2);
b=Image(:,:,3);
%取平均值,因为是二维的,故用两次mean函数
avgR = mean(mean(r));
avgG = mean(mean(g));
avgB = mean(mean(b));
avgRGB = [avgR avgG avgB];
grayValue = (avgR + avgG + avgB)/3
scaleValue = grayValue./avgRGB;
newI(:,:,1) = scaleValue(1) * r;
newI(:,:,2) = scaleValue(2) * g;
newI(:,:,3) = scaleValue(3) * b;
y=uint8(newI);
b. ScaleByMax算法
scaleByMax解释:
scaleByMax代码;
function y=ScaleByMax(img)
R = img(:,:,1);
G = img(:,:,2);
B = img(:,:,3);
Rmax=max(max(R));
Gmax=max(max(G));
Bmax=max(max(B));
Cmax=min([Rmax,Gmax,Bmax]);
% calculate the pix,which larger than Cmax
Nr=sum(R(:)>=Cmax);
Ng=sum(G(:)>=Cmax);
Nb=sum(B(:)>=Cmax);
% find the largest N for Nr Ng Nb
Nmax=max([Nr,Ng,Nb]);
% for each of the find the number of element which is larger than Rmax;
for pix=Rmax:-1:0 % R
Lr=R>=pix;
nr=sum(Lr(:));
if nr>=Nmax
Rth=pix;
break
end
end
for pix=Gmax:-1:0 % G
Lr=G>=pix;
nr=sum(Lr(:));
if nr>=Nmax
Gth=pix;
break
end
end
for pix=Bmax:-1:0 % B
Lr=B>=pix;
nr=sum(Lr(:));
if nr>=Nmax
Bth=pix;
break
end
end
result(:,:,1) = Cmax/Rth*R;
result(:,:,2) = Cmax/Gth*G;
result(:,:,3) = Cmax/Bth*B;
y = result;
二、空间域操作
2.1 二维卷积和滤波
Conv2(): 求二维卷积
C = conv2(A,B,shape)
求AB的二维卷积,原理如图:
shape用于处理边缘,有’same’’full’’valid’三种之