日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

改变图像的对比度和亮度改变图像的对比度和亮度的软件

發布時間:2023/12/3 综合教程 42 生活家
生活随笔 收集整理的這篇文章主要介紹了 改变图像的对比度和亮度改变图像的对比度和亮度的软件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目標

在本教程中, 你將學習到以下內容:

  • 訪問像素值;
  • 用零初始化矩陣;
  • 學習CV :: saturate_cast的作用及其有用的原因;
  • 學習有關像素變換的很酷的知識;
  • 提高圖像亮度的實例。

理論

下述解釋援引自理查德·斯澤利斯基(Richard Szeliski)的<<計算機視覺算法和應用>>一書。

圖像處理

  • 常用的圖像處理操作是一個函數,它將一個或多個圖像作為輸入并生成輸出圖像。
  • 圖像變可被視為:點運算符(像素變換);鄰近(基于區域的)運算符。

像素變換

  • 在圖像處理中, 每個輸出像素的值僅取決于相應的輸入像素值(可能還包括一些全局收集的信息或參數);
  • 此類操作實例包括亮度調整、對比度調整以及顏色的校正和轉換。

亮度和對比度調整

兩種常用對比度調整的方法是將像素值乘以或加上一個常數:

  • 參數α > 0和β通常稱為增益參數和偏置參數,通過這兩個參數分別來控制對比度和亮度。
  • F ( X )為源圖像的像素,G ( X )為輸出圖像的像素。可以方便地寫出以下表達式:
  • 其中i和j表示位于第i行,第j列的像素。

代碼
C ++

(Java 版本請訪問: https://github.com/opencv/opencv/blob/master/samples/java/tutorial_code/ImgProc/changing_contrast_brightness_image/BasicLinearTransformsDemo.java

Python 版本請訪問: https://github.com/opencv/opencv/blob/master/samples/python/tutorial_code/imgProc/changing_contrast_brightness_image/BasicLinearTransforms.py)

  • 單擊 這里,可下載源代碼
  • 下面的代碼執行g(i,j)=α?f(i,j)+β操作

代碼詳解
C ++

使用CV :: imread加載圖像并將其保存到Mat對象中:

接下來,對該圖像做一些轉換,為此需要創建一個新的Mat對象來存放它。此外,我們希望它具備以下特征:

  • 初始像素值為零;
  • 與原始圖像相同的尺寸和數據類型。

cv::Mat::zeros返回一個基于image.size()和image.type() 的Matlab格式的零初始化值。

  • 我們現在要求用戶輸入α和β值:

  • 為了執行g(i,j)=α?f(i,j)+β操作,我們必須訪問圖像的每個像素。由于是對BGR圖像進行操作,所以每個像素包含(B,G和R)三個值,我們必須分別訪問它們。具體代碼如下:

注意(只適用于C ++代碼):

  • 我們利用 image.at(y,x)[c]來訪問圖像的各個像素,其中?是行號, X是列號,C是B,G或R(0,1或2);
  • 由于α?p(i,j)+β 操作的值可能溢出或為非整數(如α是浮點數),我們用CV :: saturate_cast來確保該值的有效性;
  • 最后,我們用以下方式創建窗口并顯示圖像。

我們利用以下簡單的命令來取代for循環來訪問圖像的每個像素:

cv::Mat::convertTo將執行*new_image = a*image + beta*操作.。但是,我們想向你展示如何訪問每個像素。 在任何情況下,這兩種方法都給出相同的結果,但 convertTo 更加優化并且工作速度更快。

結果

  • 我們不運行代碼,設置α = 2.2和β = 50。

實例

在本小節中,我們將以前學到的技巧付諸實戰,通過調整圖像的亮度和對比度來校正曝光不足的圖片。同時,學習利用伽瑪校正(gamma correction)技術來校正圖像的亮度。

圖像亮度和對比度調整

增大(或減小) β值將加大(/減小)各個像素的對比度。像素值超出 [0; 255]范圍之外的值將會飽和(即:大于255,或小于0的像素值將鉗位到255或 0)。

原始圖像的淺灰色直方圖中,深灰色亮度= 80 GIMP

直方圖表示該色彩像素中每種色彩的數目。深色圖像的像素值將大于淺色圖像的像素值,因此直方圖的左半部分會出現一個峰值。當添加一個恒定的偏差之后,整個直方圖右移,為所有的像素增加了一個恒定的偏置。

修改參數α將修改水平軸的展幅,如果α <1中,色彩值將被壓縮,其結果是圖像的對比度降低。

原圖像的淺灰色直方圖中,深灰色時, 對比度GIMP <0

注意,利用對比度/亮度工具Gimp獲得的上述柱狀圖,亮度工具的偏置參數β應該與之相同,但對比度工具的增益參數α是不同的(可以從前面的直方圖中看出)。

調整偏置參數β可以提高亮度,但同時,圖像的對比度會下降,圖像上似乎會蒙上一層輕微的面紗。調整增益α增益可緩釋這種效果,但是由于出現飽和,圖像將失去原有明亮區域的一些細節。

伽瑪校正

伽瑪校正 利用輸入值和輸出映射值之間的非線性變換,校正圖像的亮度:

由于這種關系是非線性的,其效果不會影響所有的像素,最終輸出將取決于像素的原始值。

打印出不同的伽瑪值(gamma)

當γ <1時,,原始圖像的暗區將變得更加明亮,整個直方圖將右移;當γ > 1時, 原始圖像的亮區將變得更暗,整個直方圖將左移。

糾正曝光不足的圖像

我們設置α = 1.3和β = 40修正下面的圖像。

圖: Visem的作品 [CC BY-SA 3.0],來源:維基共享資源

圖像的整體亮度得到了改善,但可以看出: 由于色彩的像素數值飽和,圖中云彩已經飽和(攝影高光修剪)。

我們用γ=0.4修正下面的圖像。

圖: Visem的作品 [CC BY-SA 3.0],來源:維基共享資源

由于映射是非線性的,伽馬校正添加了少量的飽和效應,并且不存在前面所述方法的數值飽問題。

左邊:α,β校正后的直方圖;中間:原始圖像的直方圖;右邊:伽馬校正后的直方圖

上圖比較了三幅圖像(三個直方圖的y值不相同)的直方圖。從中可以發現,大部分的像素值都在原始圖像直方圖的下部。α , β修正后,由于圖像出現飽和,在255 處可以觀察到一個峰值,整個直方圖右移。伽瑪校正后,直方圖右移,圖像暗區域中的像素移動的位移比在明亮區域像素移動的位移更大(見伽瑪曲線圖)。

在本教程中,描述了兩種調整圖像對比度和亮度簡單的方法。它們只是基本技術,不能用作光柵圖形編輯器的替代品!

代碼
C ++

教程的源代碼請訪問這里。

伽馬校正的源代碼Code:

在這里,由于一次只需要計算256 個數值,利用查找表來提高計算性能。

更多資源

  • 圖形渲染中的伽瑪校正
  • CRT監視器的伽瑪校正和圖像顯示
  • 數字曝光技術

總結

以上是生活随笔為你收集整理的改变图像的对比度和亮度改变图像的对比度和亮度的软件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。