最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中OpenCV?Tutorials?20??高動態(tài)范圍成像的實現(xiàn)步驟

 更新時間:2022年06月16日 11:43:08   作者:Detection  
這篇文章主要介紹了OpenCV?Tutorials?20?-?高動態(tài)范圍成像,本文還給大家展示了一種稱為曝光融合的替代方法,它可以產(chǎn)生低動態(tài)范圍的圖像,需要的朋友可以參考下

高動態(tài)范圍成像

一、引言

如今,大多數(shù)數(shù)字圖像和成像設(shè)備每通道使用 8 位整數(shù)表示灰度,因此將設(shè)備的動態(tài)范圍限制在兩個數(shù)量級(實際上是 256 級),而人眼可以適應變化十個數(shù)量級的照明條件。當我們拍攝真實世界場景的照片時,明亮區(qū)域可能曝光過度,而黑暗區(qū)域可能曝光不足,因此我們無法使用單次曝光捕捉所有細節(jié)。 HDR 成像適用于每通道使用超過 8 位(通常為 32 位浮點值)的圖像,允許更寬的動態(tài)范圍。獲取 HDR 圖像的方法有很多種,但最常見的一種是使用以不同曝光值拍攝的場景照片。要結(jié)合這些曝光,了解相機的響應函數(shù)以及估計它的算法很有用?;旌?HDR 圖像后,必須將其轉(zhuǎn)換回 8 位才能在普通顯示器上查看。這個過程稱為色調(diào)映射。當場景或相機的對象在鏡頭之間移動時,會出現(xiàn)額外的復雜性,因為應該配準和對齊具有不同曝光的圖像。在本教程中,我們將展示如何從曝光序列中生成和顯示 HDR 圖像。在我們的例子中,圖像已經(jīng)對齊并且沒有移動對象。我們還展示了一種稱為曝光融合的替代方法,它可以產(chǎn)生低動態(tài)范圍的圖像。 HDR 管道的每個步驟都可以使用不同的算法來實現(xiàn),因此請查看參考手冊以了解所有這些。

二、曝光序列

download.png

三、代碼演示

from __future__ import print_function
from __future__ import division
import cv2 as cv
import numpy as np
import argparse
import os
def cv_show(name, img):
    cv.imshow(name, img)
    cv.waitKey(0)
    cv.destroyAllWindows()
def compare(imgs):
  #  for i in range(len(imgs)):
 #       imgs[i][:,-3:-1,:] = [255,255,255]
    res = np.hstack(imgs)
    cv_show('Compare', res)
def loadExposureSeq(path):
    images = []
    times = []
    with open(os.path.join(path, 'list.txt')) as f:
        content = f.readlines()
    for line in content:
        tokens = line.split()
        images.append(cv.imread(os.path.join(path, tokens[0])))
        # 便于之后的逆CRF操作
        times.append(1 / float(tokens[1]))
    return images, np.asarray(times, dtype=np.float32)
# jupyter 難以手動輸入?yún)?shù),故使用絕對路徑
#parser = argparse.ArgumentParser(description='Code for High Dynamic Range Imaging tutorial.')
# parser.add_argument('--input', type=str, help='Path to the directory that contains images and exposure times.')
# args = parser.parse_args()
# if not args.input:
#     parser.print_help()
#     exit(0)
# images, times = loadExposureSeq(args.input)
images, times = loadExposureSeq('exposures/')
calibrate = cv.createCalibrateDebevec()
response = calibrate.process(images, times)
merge_debevec = cv.createMergeDebevec()
hdr = merge_debevec.process(images, times, response)
tonemap = cv.createTonemap(2.2)
ldr = tonemap.process(hdr)
merge_mertens = cv.createMergeMertens()
fusion = merge_mertens.process(images)
cv.imwrite('fusion.png', fusion * 255)
cv.imwrite('ldr.png', ldr * 255)
cv.imwrite('hdr.hdr', hdr)
True

四、解釋

1. 加載圖像和曝光時間

images, times = loadExposureSeq('exposures/')
# 查看數(shù)據(jù)集中曝光圖像個數(shù)
len(images)
16

首先我們從用戶自定義文件夾中(此處我采用了教程提供的數(shù)據(jù)集并將其放置到了同目錄下便于載入)載入輸入圖像以及其曝光時間。文件夾中需要包含圖像和list.txt文本文件,其中包含了文件名稱和反曝光時間

提供的圖像數(shù)據(jù)集的列表如下:

memorial00.png 0.03125

memorial01.png 0.0625

...

memorial15.png 1024

2. 估計相機響應

calibrate = cv.createCalibrateDebevec()
response = calibrate.process(images, times)
  • 用法如下:

cv.createCalibrateDebevec( [, samples[, lambda_[, random]]] ) -> retval

  • 參數(shù)含義:
  • samples :number of pixel locations to use
  • lambda :smoothness term weight. Greater values produce smoother results, but can alter the response.
  • random :if true sample pixel locations are chosen at random, otherwise they form a rectangular grid.

很多 HDR 構(gòu)建算法都需要了解相機響應函數(shù)(CRF)。 我們使用一種校準算法來估計所有 256 個像素值的逆 CRF

3. 形成HDR圖像

merge_debevec = cv.createMergeDebevec()
# 利用逆CRF形成HDR圖像
hdr = merge_debevec.process(images, times, response)
  • 用法如下:

cv.createMergeMertens( [, contrast_weight[, saturation_weight[, exposure_weight]]] ) -> retval

  • 參數(shù)含義:
  • contrast_weight :contrast measure weight. See MergeMertens.
  • saturation_weight: saturation measure weight
  • exposure_weight :well-exposedness measure weight

我們使用 Debevec 的加權(quán)方案,使用上一項中計算的響應來構(gòu)建 HDR 圖像。

4. 對 HDR 圖像進行色調(diào)映射

tonemap = cv.createTonemap(2.2)
ldr = tonemap.process(hdr)
cv_show('Result', ldr)
  • 用法如下: cv.createTonemap( [, gamma] ) -> retval
  • 參數(shù)含義:
  • gamma :positive value for gamma correction. Gamma value of 1.0 implies no correction, gamma equal to 2.2f is suitable for most displays. Generally gamma > 1 brightens the image and gamma < 1 darkens it.

由于我們想在普通 LDR 顯示器上看到我們的結(jié)果,我們必須將 HDR 圖像映射到 8 位范圍,保留大部分細節(jié)。 這是色調(diào)映射方法的主要目標。 我們使用帶有雙邊濾波的色調(diào)映射器,并將 2.2 設(shè)置為 gamma 校正的值。

5. 實現(xiàn)曝光融合

merge_mertens = cv.createMergeMertens()
fusion = merge_mertens.process(images)

如果我們不需要 HDR 圖像,還有另一種方法可以合并我們的曝光。 這個過程稱為曝光融合,并產(chǎn)生不需要伽馬校正的 LDR 圖像。 它也不使用照片的曝光值。

compare([ldr,fusion])

download.png

左邊是對HDR圖像直接進行色調(diào)映射的結(jié)果,只會保留大部分細節(jié),右邊圖像是使用所有輸入圖像序列進行圖像曝光融合的結(jié)果

請注意,HDR 圖像不能以一種常見的圖像格式存儲,因此我們將其保存為 Radiance 圖像 (.hdr)。 此外,所有 HDR 成像函數(shù)都返回 [0, 1] 范圍內(nèi)的結(jié)果,因此我們應該將結(jié)果乘以 255。您可以嘗試其他色調(diào)映射算法:cv::TonemapDrago、cv::TonemapMantiuk 和 cv::TonemapReinhard 您還可以調(diào)整 您自己的照片的 HDR 校準和色調(diào)映射方法參數(shù)。

# 修改gamma使整幅圖像變亮
tonemap = cv.createTonemap(10)
ldr = tonemap.process(hdr)
cv_show('Result', ldr)

download.png

五、補充資源

  • Paul E Debevec and Jitendra Malik. Recovering high dynamic range radiance maps from photographs. In ACM SIGGRAPH 2008 classes, page 31. ACM, 2008. [57]
  • Mark A Robertson, Sean Borman, and Robert L Stevenson. Dynamic range improvement through multiple exposures. In Image Processing, 1999. ICIP 99. Proceedings. 1999 International Conference on, volume 3, pages 159–163. IEEE, 1999. [207]
  • Tom Mertens, Jan Kautz, and Frank Van Reeth. Exposure fusion. In Computer Graphics and Applications, 2007. PG'07. 15th Pacific Conference on, pages 382–390. IEEE, 2007. [170]-range_imaging
  • Recovering High Dynamic Range Radiance Maps from Photographs (webpage) www.pauldebevec.com/Research/HD…

到此這篇關(guān)于Python中OpenCV Tutorials 20  高動態(tài)范圍成像的文章就介紹到這了,更多相關(guān)OpenCV高動態(tài)范圍成像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Django框架搭建的簡易圖書信息網(wǎng)站案例

    Django框架搭建的簡易圖書信息網(wǎng)站案例

    這篇文章主要介紹了Django框架搭建的簡易圖書信息網(wǎng)站案例,結(jié)合具體實例形式分析了基于Django框架實現(xiàn)圖書信息管理網(wǎng)站的具體步驟、相關(guān)實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下
    2019-05-05
  • python:刪除離群值操作(每一行為一類數(shù)據(jù))

    python:刪除離群值操作(每一行為一類數(shù)據(jù))

    這篇文章主要介紹了python:刪除離群值操作(每一行為一類數(shù)據(jù)),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • vscode調(diào)試django項目的方法

    vscode調(diào)試django項目的方法

    這篇文章主要介紹了vscode調(diào)試django項目的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Python中.py文件和.ipynb文件的區(qū)別詳解

    Python中.py文件和.ipynb文件的區(qū)別詳解

    Python開發(fā)者常用的兩種文件格式.py和.ipynb各有特點,本教程將通過對比分析、代碼示例和場景說明,幫助開發(fā)者全面理解二者的區(qū)別與聯(lián)系,需要的朋友可以參考下
    2025-04-04
  • python模塊之sys模塊和序列化模塊(實例講解)

    python模塊之sys模塊和序列化模塊(實例講解)

    下面小編就為大家?guī)硪黄猵ython模塊之sys模塊和序列化模塊(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • python實現(xiàn)控制臺輸出彩色字體

    python實現(xiàn)控制臺輸出彩色字體

    這篇文章主要為大家詳細介紹了python實現(xiàn)控制臺輸出彩色字體,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 解決tensorflow打印tensor有省略號的問題

    解決tensorflow打印tensor有省略號的問題

    今天小編就為大家分享一篇解決tensorflow打印tensor有省略號的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python字典“鍵”和“值”的排序5種方法

    Python字典“鍵”和“值”的排序5種方法

    這篇文章主要介紹了5種Python字典“鍵”和“值”的排序方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • python中doctest庫實例用法

    python中doctest庫實例用法

    在本篇文章里小編給大家整理的是一篇關(guān)于python中doctest庫實例用法的相關(guān)內(nèi)容,有需要的朋友們可以學習參考下。
    2020-12-12
  • Python自動化之批量生成含指定數(shù)據(jù)的word文檔

    Python自動化之批量生成含指定數(shù)據(jù)的word文檔

    在平時工作當中,經(jīng)常需要處理文件,特別是Word,我們常常會機械的重復打開、修改、保存文檔等一系列操作。本文將主要介紹如何通過Python批量生成含指定數(shù)據(jù)的word文檔,感興趣的同學可以來看一看
    2021-11-11

最新評論

织金县| 海淀区| 长兴县| 朝阳区| 友谊县| 内黄县| 岚皋县| 芜湖市| 平和县| 静海县| 如东县| 临猗县| 广河县| 新竹县| 繁峙县| 涞源县| 凯里市| 乡宁县| 禄丰县| 嵊泗县| 浪卡子县| 安溪县| 钦州市| 饶平县| 惠安县| 历史| 广丰县| 三原县| 翁牛特旗| 枝江市| 柘荣县| 黄石市| 五家渠市| 平凉市| 松江区| 乃东县| 治县。| 新余市| 柏乡县| 安宁市| 华阴市|