引言
由于受到環境,光線等的影響,拍攝的照片清晰度和對比度比較低,不能夠突出圖像中的重點。圖像增強就是通過一定手段來增強圖像的對比度,使得其中的人物或者事物更加明顯,有利于后邊的識別等處理。本章介紹幾個傳統的圖像增強算法,并給出matlab實現代碼,看一看不同算法的實現效果,最后再介紹一下深度學習在圖像增強上的應用。
1. 直方圖均衡
在直方圖中,如果灰度級集中于高灰度區域,圖像低灰度就不容易分辨,如果灰度級集中于低灰度區域,那么高灰度就不容易分辨。為了能夠讓高低灰度都容易分辨,最好的辦法是將圖像進行轉換,使得灰度級分布概率相同。這就是直方圖均衡的目的。假設圖像經過如下變換:
Matlab代碼如下:
function histogramEqual
imgData=imread('../data/img0.jpg');
gray=rgb2gray(imgData);
imshow(gray);
imwrite(gray, '../data/gray0.jpg');
%calculate histogram
histgramData=linspace(0, 0, 256);
[grayRow, grayColumn]=size(gray);
grayPixelNumber=grayRow*grayColumn;
for i=1:grayRow
for j=1:grayColumn
histgramData(gray(i, j)+1)=histgramData(gray(i, j)+1)+1;
end
end
%histogram equalization
histogramIntegral=linspace(0, 0, 256);
for i=1:256
for j=1:i
histogramIntegral(i)=histogramIntegral(i)+histgramData(j);
end
end
for i=1:grayRow
for j=1:grayColumn
gray(i, j)=round(255*histogramIntegral(gray(i, j)+1)/grayPixelNumber);
end
end
imshow(gray);
imwrite(gray, '../output/histogramEqual.jpg');
end
處理結果:
圖1.1 直方圖均衡化結果(左)原圖像(右)結果
2. Gamma變換
Gamma變換主要用于圖像修正,將灰度過高或者過低的圖片進行修正,增強對比度。變換公式是對每個像素進行乘積運算:
從下圖的gamma曲線中可以看出其變換原理:
圖2.1 圖像gamma變換
從圖中可以看出當r值大于1,會拉伸圖像中灰度級較高的區域,壓縮灰度級較低部分;當r值小于1時,會拉伸灰度級較低部分,而壓縮灰度級較高部分。這樣來調整圖像對比度。
Matlab代碼:
function imageGamma(r)
imgData=imread('../data/img0.jpg');
gray=rgb2gray(imgData);
[grayRow, grayColumn]=size(gray);
gray=double(gray);
for i=1:grayRow
for j=1:grayColumn
gray(i, j)=255*((gray(i, j)/255)^r);
gray(i, j)=round(gray(i, j));
end
end
gray=uint8(gray);
fileName='../output/gamma';
fileSuf='.jpg';
gammaStr=num2str(r);
file=[fileName, gammaStr, fileSuf];
imshow(gray);
imwrite(gray, file);
end
結果如下:
圖2.2 gamma變換(左)r=0.5(右)r=1.5
3. Laplace變換
對圖像進行二階微分操作可以突出圖像邊緣,增強細節。通常希望構造一個同性濾波器,其對圖像方向的變化不敏感。一個最簡單的同性濾波器就是laplace算子,定義為:
Matlab代碼為:
% g(x, y)=f(x, y)+c*delta2 f(x, y)
function laplace(c)
imgData=imread('../data/img0.jpg');
gray=rgb2gray(imgData);
[grayRow, grayColumn]=size(gray);
gray=double(gray);
%laplace
laplacePlate=[0, 1, 0; 1, -4, 1; 0, 1, 0];
laplaceResult=zeros(grayRow, grayColumn);
laplaceGray=zeros(grayRow, grayColumn);
laplaceGray=double(laplaceGray);
for i=1:grayRow
for j=1:grayColumn
for k=-1:1
for n=-1:1
if (i+k>=1) && (i+k=1) && (j+n grayValue=gray(i+k, j+n);
else
grayValue=0;
end
laplaceResult(i, j)=laplaceResult(i, j)+laplacePlate(k+2, n+2)*grayValue;
end
end
laplaceGray(i, j)=round(gray(i, j)+c*laplaceResult(i, j));
end
end
maxLaplaceGray=max(max(laplaceGray));
minLaplaceGray=min(min(laplaceGray));
laplaceGray=((laplaceGray-minLaplaceGray) .* 255) ./(maxLaplaceGray-minLaplaceGray);
laplaceGray=uint8(laplaceGray);
fileName='../output/laplace';
fileSuf='.jpg';
gammaStr=num2str(c);
file=[fileName, gammaStr, fileSuf];
figure('name', 'gray');
imshow(laplaceGray);
figure('name', 'laplace');
imshow(laplaceResult);
imwrite(laplaceGray, file);
imwrite(laplaceResult, '../output/laplaceResult.jpg');
end
結果為:
圖3.1 laplace算子增強(上左)laplace變換結果(上右)C=0.5(下)C=0.8
4. Retix算法
Retix是一種建立在光學物理特性基礎上的算法,假設入射光L(x, y)入射到物體上,經過反射R(x, y),進入到人眼的光變為:
為了降低卷積運算的的運算量,我們取了7x7的高斯卷積模板。
Matlab代碼為:
function singleRetix(c)
imgData=imread('../data/img0.jpg');
gray=rgb2gray(imgData);
[grayRow, grayColumn]=size(gray);
gray=double(gray);
gaussConv=zeros(grayRow, grayColumn);
for i=1:grayRow
for j=1:grayColumn
for k=-3:3
for n=-3:3
gaussValue=two_d_gauss(k, n, c);
if (i+k>=1) && (i+k=1) && (j+n grayValue=gray(i+k, j+n);
else
grayValue=0;
end
gaussConv(i, j)=gaussConv(i, j)+grayValue*gaussValue;
end
end
end
end
gray=log(gray);
gaussConv=log(gaussConv);
reflectGray=exp(gray-gaussConv);
maxReflectGray=max(max(reflectGray));
minReflectGray=min(min(reflectGray));
reflectGray=((reflectGray-minReflectGray) .* 255) ./ (maxReflectGray-minReflectGray);
reflectGray=uint8(reflectGray);
fileName='../output/retix';
fileSuf='.jpg';
gammaStr=num2str(c);
file=[fileName, gammaStr, fileSuf];
figure('name', 'processed');
imshow(reflectGray);
imwrite(reflectGray, file);
end
function res=two_d_gauss(x, y, c)
res=(1/sqrt(2*pi*c))*(-(x^2+y^2)/c^2);
end
結果:
圖4.1 Retix結果(左)sigma=90(右)sigma=150
5. 基于深度學習的圖像增強
LL-NET是第一個用深度學習來增強圖像的方法。在其論文中使用自動編碼器從表示學習的角度來解決低光圖像增強的問題,這些自動編碼器經過訓練以學習低光圖像中的基礎信號特征并自適應地增亮和去噪。LL-NET借鑒了SSDA網絡的稀疏特性,可以用來去除圖像中噪聲。運用網絡的泛華能力來提供低照度下的測試圖片,讓網絡來學習到圖片的特征,從而降低噪聲,提高圖像對比度。
網絡結構如下:
圖5.1 LL-NET網絡結構
結果為:
圖5.2 結果
結論
本文介紹了四種傳統的圖像增強算法,以及一種基于深度學習的方法。
編輯:hfy
-
圖像增強算法
+關注
關注
0文章
4瀏覽量
5419 -
深度學習
+關注
關注
73文章
5548瀏覽量
122337
發布評論請先 登錄
評論