• "date": "2020-04-29"
  • "title": "图像处理实验"

环境:Matlab R2017b

一、图像数据格式

  1. bmp:位图,无损图片数据格式
  2. jpg:位图,有损压缩,尺寸小,不支持透明
  3. png:无损压缩,质量高,支持图像透明

二、图像空间处理

i0 = imread('0.jpg');
i1 = 1.25*i0+10; %增强亮度
i2 = 255-i0; %反色
i3 = imrotate(i0,90,'bilinear','crop'); %旋转90度

三、颜色空间转换

rgb1 =imread('1.jpg');
xyz1 = rgb2xyz(rgb1);
YCbCr1 = rgb2ycbcr(rgb1);

rgb2 =imread('2.jpg');
xyz2 = rgb2xyz(rgb2);
YCbCr2 = rgb2ycbcr(rgb2);

直接利用matlab中自带函数对颜色空间进行转换,通过对比同一场景下不同光线的图片,不难发现:

其中xyz空间整体偏暗,暖色更少,能更好展示光照与对比度,但对暗处细节不能很好区分;

而YCbCr空间整体偏青紫,不同色彩有更大区分度,对暗处细节色彩也有一定分辨能力,但色彩失真明显。

四、频域分析

img=imread('1.jpg');
imgF = fft(img);
%中值滤波
imgmid = medfilt2(rgb2gray(img));
imgmidF = fft(imgmid);
%均值滤波
avg = fspecial('average',[3,3]);
imgavg = imfilter(img,avg,'replicate');
imgavgF = fft(imgavg);

%快速傅里叶变换
function imF = fft(I)
if size(I, 3) > 1
   G = im2double(rgb2gray(I));
else
   G = im2double(I);
end
F = fftshift(fft2(G));
imF = log10(abs(F)+1);
end

通过对原图进行二维快速傅里叶变换,并对频谱图像中心化,可以得到中心亮,向四周辐射白线的二维频谱图。

对图像进行中值滤波后,通过观察,可以发现频谱图左上与右下的白斑有明显减少,整个图像外围辐射出去的白线也更少了。

对图像进行均值滤波后,通过观察,可以发现频谱图的中心化更明显,除了中央十字的白线外,外围的白线几乎消失。

五、白平衡算法

%白平衡
wb = imread('2.jpg');
R = wb(:,:,1);
G = wb(:,:,2);
B = wb(:,:,3);
%求其各通道平均值及增益
Raver = mean(mean(R));
Gaver = mean(mean(G));
Baver = mean(mean(B));
K = (Raver+Gaver+Baver)/3;
Kr = K/Raver;
Kg = K/Gaver;
Kb = K/Baver;
%更新RGB值
Rnew = R*Kr;
Gnew = G*Kg;
Bnew = B*Kb;
%合并通道
wbnew(:,:,1) = Rnew;
wbnew(:,:,2) = Gnew;
wbnew(:,:,3) = Bnew;