国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

VB圖像處理之圖像的亮度對比度調(diào)整

2019-11-18 17:41:38
字體:
供稿:網(wǎng)友
在圖像處理中,恐怕大家最熟悉的就是對于圖像的亮度和對比度調(diào)整了。

  前面一定也有很多人寫過這樣的文章了,但是想把我的這個系列作一個完整的小結(jié),我就再羅嗦一番了。

  還是以24位色圖像為例子,每種色彩都可以用0-255,一共256種深度來表示。如果我們把它畫在一個二維坐標上,正好是一條直線。

  比如我們將像素的色深作為橫坐標,輸出色深作為縱坐標的畫,正好是一條經(jīng)過原點(0,0)的45度斜線。

->->

  如圖中直線A所表示的,角T為45度,表示它的對比度正好為1。那么很容易就可以寫出它的直線方程:Out=In*1,系數(shù)1就是對比度的概念如果把條直線加上一個偏移量變成B,那么它的直線方程就成為:Out=In*1 (ab)偏移量(ab)就是亮度的增量。

  只要有初中的代數(shù)知識就很容易看出它滿足一條直線方程:Y=A*X B。

  但是,我們這里要處理的情況稍微有些不同,在圖像處理中,對比度和亮度要分別對待。不能因為改變而改變亮度,因為我們習(xí)慣上把灰色(127,127)這一點作為中心點。比如,我們加大了對比度,原來的直線A就變成如直線D所表示的,在改變了對比度的同時,也增加了亮度(ab),而我們心目中的變化應(yīng)該是入直線C那樣。也就是說,我們把(127,127)這一點映射成了坐標系的原點。

  那么我們就要把原來的直線公式修改成:Y=(X-127)*A B 127。A表示對比度,B表示亮度增量。我們驗證一下:只要亮度增量B=0,無論怎么改變對比度A,該直線始終通過中心點(127,127),也就是說改變對比度的同時,亮度沒有改變。

  由此,我們就可以推導(dǎo)出顏色的對比度亮度計算公式了:

->NewRed=(OldRed-127)*A 127+B
NewGreen=(OldGreen-127)*A 127+B
NewBlue=(OldBlue-127)*A 127+B->

  現(xiàn)在你是否已經(jīng)準備著手用這個公式來寫出你自己的亮度對比度子程序了呢?

  慢著,再多做一步吧。我們是在遍程序,不是在做初中代數(shù)考試。這多出來的一步將使你的程序的執(zhí)行效率更高一些。

  我們把上面的公式再推導(dǎo)一下:

  Y=(X-127)*A B 127=>Y=X*A-127*A 127+B(1)

  令:B=B-127*A+127(2)

  由上面(1),(2)兩步,得到一個新的公式:Y=X*A B

  咦?怎么又變回來了??

  是的公式的形式確實是變回來了,不過B所代表的東西已經(jīng)不同了。

  或許你又會說我這是多此一舉,請聰明的讀者想像一下:在一個普通的圖片做亮度對比度運算的時候,我們上面這些小小的變化將帶來什么樣的效率提升。假設(shè)一張圖片大小是1027*768

  一共有786432個像素,而每個像素又要分別計算紅綠藍三種顏色。

  那么,上述這個公式就需要計算786432*3=2359296次,經(jīng)過這么多次運算的放大,哪怕是小小的一個重復(fù)計算都將浪費很長的時間。

  因為在調(diào)用子程序的時候亮度和對比度都已經(jīng)確定,那么B=B-127*A+127這一步就可以放在循環(huán)的外面先作好。從而減少了程序的運算時間。

  下面給出我的程序,以供參考:

->PublicSubBrightnessAndContrast(ByValRedOffsetAsLong,ByValGreenOffsetAsLong,ByValBlueOffsetAsLong,OptionalByValRedContrastAsSingle=1,OptionalByValGreenContrastAsSingle=1,OptionalByValBlueContrastAsSingle=1)
 DimXAsLong
 DimYAsLong
 DimMidRAsInteger
 DimMidGAsInteger
 DimMidBAsInteger
 DimMaxAsLong
 OnErrorGoToErrLine
 Done=False
 TimeFilter=timeGetTime
 MidR=RedOffset-127*(RedContrast-1)'計算新的位移量B
 MidG=GreenOffset-127*(GreenContrast-1)
 MidB=BlueOffset-127*(BlueContrast-1)
 Max=255
 ForX=0ToOutPutWid
  ForY=0ToOutPutHei
   R=ColOut(2,X,Y)
   G=ColOut(1,X,Y)
   B=ColOut(0,X,Y)
   R=R*RedContrast MidR'計算Y=X*A B
   G=G*GreenContrast MidG
   B=B*BlueContrast MidB
   IfR>MaxThenR=Max'輸出值判斷是否在0到255之間
   IfR<0ThenR=0
   IfG>MaxThenG=Max
   IfG<0ThenG=0
   IfB>MaxThenB=Max
   IfB<0ThenB=0
   ColOut(2,X,Y)=R
   ColOut(1,X,Y)=G
   ColOut(0,X,Y)=B
  Next
 Next
 Done=True
 TimeFilter=timeGetTime-TimeFilter
 ExitSub
ErrLine:
 MsgBoxErr.Descr->

  作為這個系列的最后一篇文章,我在我的程序ImageCast中所用到的所效果的算法和主要代碼都已經(jīng)貼出來了。也算是對自己對大家的一個小小交待吧。->


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 大新县| 锦州市| 彩票| 新蔡县| 余江县| 县级市| 盐城市| 霍城县| 扎赉特旗| 长白| 涞源县| 大姚县| 双城市| 杨浦区| 阿拉尔市| 东阳市| 乌鲁木齐市| 开封县| 奉新县| 乌拉特中旗| 兴隆县| 新泰市| 余干县| 陵川县| 南澳县| 巩留县| 凉城县| 翁源县| 阳谷县| 昭平县| 隆安县| 鲁甸县| 宜兰县| 巴林左旗| 北宁市| 中西区| 页游| 方山县| 荣昌县| 石狮市| 永寿县|