?

一種基于雙邊濾波的HDR算法

2016-12-23 05:51宋國琴
通化師范學院學報 2016年10期
關鍵詞:鄰域雙邊亮度

何 春,宋國琴

(西華師范大學 教育信息技術中心,四川 南充 637002)

?

一種基于雙邊濾波的HDR算法

何 春,宋國琴

(西華師范大學 教育信息技術中心,四川 南充 637002)

為了能讓高動態范圍圖像顯示在低動態范圍輸出設備上,需對高動態范圍圖像進行壓縮處理.算法根據雙邊濾波的原理對輸入的圖像信息進行分解,得到保留圖像亮度信息的基礎層和表示圖像反射率信息的細節層,然后降低基礎層的對比度,保留細節層的信息,最后再將兩層的數據進行合并,輸出最終的圖像.實驗表明,算法較好地還原了圖像細節,有效地調節了圖像亮度,使之更好地適應了人眼視覺系統的感知范圍.

HDR圖像;雙邊濾波;色調映射;圖像壓縮

高動態范圍成像(High Dynamic Range Imaging,HDRI)是一種能夠比普通數字成像技術曝光更大動態范圍的技術,該技術能夠記錄更加真實的場景,通過該技術得到的圖像稱為高動態范圍(High Dynamic Range)圖像[1].HDR圖像可以通過光譜記錄儀器或多幅同一場景不同曝光時間的圖像序列合成而獲得.相對于HDR圖像的動態范圍,當前的輸出設備(顯示器、打印機等)的動態范圍極其有限,所以要將HDR圖像在輸出設備上顯示出來,必須將其高動態范圍轉換至輸出設備能夠接受的低動態范圍內,該轉換過程稱為色階重建(Tone Reproduction)或色調映射(Tone Mapping).

目前色調映射算法(Tone Mapping Operator,TMO)分為兩類:全局映射算法和局部映射算法[2].全局映射算法通過像素間點到點的對應函數對HDR圖像中的每個像素進行映射,其優點在于計算速度快,能夠保持良好的整體明暗的視覺效果,但是全局映射會造成細節信息的嚴重丟失.局部映射算法對圖像的不同區域使用不同的比例因子進行映射,映射中對較小的對比度進行增強,對較大的對比度進行壓縮,從而保留了圖像分細節信息.算法的優點在于映射后可以產生細節豐富的圖像,但該類算法需要對圖像進行分層處理,處理不好會在分層合成后的圖像邊緣處出現光暈現象或局部削弱.

本文采用Durand等提出基于雙邊濾波技術的HDR圖像色調映射算法[3],在計算HDR圖像的像素亮度值后,利用雙邊濾波將圖像分為基礎層和細節層,然后降低基礎層的對比度,保留細節層的信息,最后再將兩層的數據進行合并,輸出最終的圖像.

1 算法描述

1.1 雙邊濾波技術

雙邊濾波器是Tomasi和Manduchi于1998年提出的圖像濾波算法[4],該算法結合鄰域空間信息和像素值相似性對圖像進行濾波處理,在平滑濾波的同時能夠保留圖像的邊緣特征.

雙邊濾波器由2個高斯核函數組成:鄰域濾波和值域濾波.鄰域濾波可以對鄰域空間上相近的像素點進行加權平均,加權的系數隨著像素點距離的增大而減小.值域濾波是對像素值相近的點進行加權平均,加權系數隨著像素點值差的增大而減小.

雙邊濾波定義如下:

(1)

k(b)=∑p∈Ωf(p-b)g(Ip-Ib)

(2)

其中,I為輸入圖像,b為輸出圖像,Ω為鄰域窗口,f和g分別為2個高斯核函數,f為鄰域范圍內濾波,g為像素值領域內濾波,Ip和Ib分別為p點和b點的像素值.

高斯核函數在圖像處理中定義如下:

(3)

(4)

其中d(p,d)為2個像素點的歐幾里得距離,δ(Ip,Ib)為2個像素點灰度差值,σd為空間鄰域標準差,σr為像素亮度標準差.

由以上定義可知,雙邊濾波的權系數由空間鄰域標準差σd和像素亮度標準差σr組成,這兩個參數值的選擇非常重要,直接影響到雙邊濾波的輸出效果.多次實驗表明,σd取值0.02×max(width, height)、σr取值0.4時較為合適.

1.2 算法設計

算法首先將HDR圖像分成兩層:基礎層和細節層.基礎層保留圖像亮度信息,細節層表示圖像反射率信息[5].根據Durand等人提出的快速雙向濾波器原理對輸入的圖像信息進行分解如下:

I(x, y)=log(max(Lw(x, y),0.0001)

(5)

Ibase(x,y)=bil_filter(I(x, y))

(6)

Idetail(x,y)=I(x, y)-Ibase(x, y)

(7)

其中,Lw(x, y)為輸入HDR圖像的亮度值,I(x, y)是對輸入圖像取對數(以10為底),Ibase(x,y)為雙向濾波器的輸出結果,該結果即為圖像基本層,Idetail(x,y)作為圖像細節層被定義為原圖像與基本層之差.

根據以上分解,算法的完整過程如下:

(1)將原始圖像每個像素的R、G、B值進行分解,并按照以下公式求出原始圖像的光照強度(即亮度信息),該結果保存在基礎層里[6]:Lw(x, y)= (R*20+G*40+B) /61.

(2)按以下方法求出R、G、B分量各自占光照強度的比例,得到相應的比例值r、g、b.r=R/Lw (x, y), g=G/Lw (x, y), b=B/Lw (x, y).

(3)對原始圖像的亮度信息進行雙邊濾波處理,處理后得到基礎層的圖像信息:Ibase(x,y)=bil_filter(I(x, y)).

(4)計算原圖像與基本層之差,即圖像細節層:Idetail(x,y)=I(x, y)-Ibase(x, y).

(5)通過以下計算公式得到圖像經過處理后的細節信息[7]:Iresult(x, y)=Ibase(x, y)*compressionfactor+

Idetail(x,y)-log_absolute_scale.

(6)分別求出圖像經過處理后得到的R、G、B分量值:Rresult= r*10^Iresult(x, y)),Gresult=g*10^Iresult(x, y)),Bresult= b*10^Iresult(x, y)).

其中,compressionfactor=targetContrast/(max

(Ibase(x,y))-min(Ibase(x,y))),targetContrast取值log(5)較為理想;log_absolute_scale=max(Ibase(x, y))*compressionfactor.

1.3 算法代碼

根據上述算法設計,下面提供該算法的部分C語言代碼:

public Bitmap LoadHdrFormFreeImage(string FileName)

{ Bitmap Bmp = null;

FREE_IMAGE_FORMAT fif = FREE_IMAGE_FORMAT.FIF_UNKNOWN;

if (FreeImage.IsAvailable() == true)

{ fif = FreeImage.GetFileType(FileName, 0);

if (fif != FREE_IMAGE_FORMAT.FIF_HDR)

{

MessageBox.Show(“不是HDR格式的圖像.”);

return null;

}

fif = FreeImage.GetFIFFromFilename(FileName);

FIBITMAP Dib = FreeImage.Load(fif, FileName, FREE_IMAGE_LOAD_FLAGS.DEFAULT);

uintBpp = FreeImage.GetBPP(Dib);

if (Bpp != 96)

{

MessageBox.Show(“無法支持的HDR格式.”);

FreeImage.Unload(Dib);

return null;

}

uint Width = FreeImage.GetWidth(Dib); // 圖像寬度

uint Height = FreeImage.GetHeight(Dib); // 圖像高度

uint Stride = FreeImage.GetPitch(Dib);

IntPtr Bits = FreeImage.GetBits(Dib);

float* Data = (float*)Bits;

int Speed, Index;

byte* Pixel;

float Value;

if (RawData != null) Marshal.FreeHGlobal((IntPtr)RawData);

RawData = (float*)Marshal.AllocHGlobal((int)Width * (int)Height * 3 * sizeof(float));

CopyMemory(RawData, Data, (int)Width * (int)Height * 3 * sizeof(float));

Bmp = new Bitmap((int)Width, (int)Height, PixelFormat.Format24bppRgb);

BitmapDataBmpData = Bmp.LockBits(new Rectangle(0, 0, Bmp.Width, Bmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

Pixel = (byte*)BmpData.Scan0;

for (int Y = 0; Y < Height; Y++)

{

Speed = Y * BmpData.Stride;

Index = Y * (int)Width * 3;

for (int X = 0; X < Width; X++)

{

Value = (Data[Index + 2] * 255);

if (Value > 255)

Value = 255;

else if (Value < 0)

Value = 0;

Pixel[Speed] = (byte)Value;

Value = (Data[Index + 1] * 255);

if (Value > 255)

Value = 255;

else if (Value < 0)

Value = 0;

Pixel[Speed + 1] = (byte)Value;

Value = (Data[Index + 0] * 255);

if (Value > 255) then Value = 255;

else if (Value < 0)then Value = 0;

Pixel[Speed + 2] = (byte)Value;

Index += 3;

Speed += 3;

}

}

FreeImage.Unload(Dib);

Bmp.UnlockBits(BmpData);

Bmp.RotateFlip(RotateFlipType.RotateNoneFlipY);

return Bmp;

}

else

return null;

}

2 實驗結果及分析

為了驗證本算法的有效性以及細節保持特性,實驗對多張圖像進行了處理.如圖1、圖2所示.

圖1 實驗效果1

雖然目前對HDR圖像的色調映射算法及結果的評價方法還沒有客觀標準體系,但從算法處理的效果圖中我們可以看到本算法對于圖像的處理能夠

圖2 實驗效果2

得到基本滿意的結果.圖1、圖2的黑暗部分都得到了有效的亮度調整以及細節還原,通過色階的對比也可以發現處理后效果圖的色階相比原圖在暗調、中間調、亮調區域分布更均勻,圖像不再有過曝或曝光不足的現象.但仍然可以發現,處理后的圖像整體缺乏一定的層次感,局部細節信息仍有不同程度的丟失,這也是本算法需要進一步改進的地方.

3 結論

本文算法根據雙邊濾波的原理對輸入的圖像信息進行分解,得到保留圖像亮度信息的基礎層和表示圖像反射率信息的細節層,然后降低基礎層的對比度,保留細節層的信息,最后再將兩層的數據進行合并,輸出最終的圖像.通過實驗表明,算法對圖像的局部和整體實現了較好的結合,對于暗部圖像及亮部圖像的細節也實現了很好的還原,圖像的亮度得到了有效的調節,圖像的動態范圍大大提高,使之更好地適應了人眼視覺系統的感知范圍.算法需要改進的是,進一步降低計算復雜度,圖像處理后的效果也需進一步完善.

[1]李曉光,沈蘭蓀,林健文.一種高動態范圍圖像可視化算法[J].計算機應用研究,2007(11).

[2]Qiu G,Duan J.An optimal tone reproduction curve operator for the display high dynamic range images. Proceedings-IEEE International Symposium on Circuits and Systems,2005,ISCAS2005.

[3]Durand F, Dorsey J.Fast Bilateral Filtering for the Display of High-Dynamic-Range Images[J].ACM Transaction on Graphics,2002,21(3):257-266.

[4]Yue Dong,Xin Tong,Fabio Pellacini,BainingGuo. Printing spatially-varying reflectance for reproducing HDR images [J]. ACM Transactions on Graphics (TOG),2012 (4).

[5]朱明,劉真,李曉春.HDR圖像階調復制的非線性蒙版改進算法[J].武漢大學學報(信息科學版),2014(08).

[6]劉冬梅,趙宇明.高動態范圍圖像梯度壓縮算法[J].計算機工程,2009(20).

[7]舒妮,陳孝威.HDRI合成中新的相機響應曲線算法[J].計算機工程與設計,2012(03).

(責任編輯:王前)

2016-06-10

何春,女,四川南充人,講師.

TP391

A

1008-7974(2016)05-0051-03

10.13877/j.cnki.cn22-1284.2016.10.017

猜你喜歡
鄰域雙邊亮度
基于混合變鄰域的自動化滴灌輪灌分組算法
遠不止DCI色域,輕量級機身中更蘊含強悍的亮度表現 光峰(Appptronics)C800
稀疏圖平方圖的染色數上界
亮度調色多面手
基于鄰域競賽的多目標優化算法
電子產品回收供應鏈的雙邊匹配策略
基于細節點鄰域信息的可撤銷指紋模板生成算法
亮度一樣嗎?
基于不確定性嚴格得分下雙邊匹配決策方法
基于不確定性嚴格得分下雙邊匹配決策方法
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合