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

python?使用OpenCV進行曝光融合

 更新時間:2022年04月29日 15:01:59   作者:liferecords  
這篇文章主要介紹了python?使用OpenCV進行曝光融合,使用OpenCV的Exposure?Fusion,曝光融合是一種將使用不同曝光設(shè)置拍攝的圖像合成為一張看起來像色調(diào)映射的高動態(tài)范圍(HDR)圖像的圖像的方,下文更多詳細內(nèi)容介紹,需要的小伙伴可以參考一下

1 什么是曝光融合

曝光融合是一種將使用不同曝光設(shè)置拍攝的圖像合成為一張看起來像色調(diào)映射的高動態(tài)范圍(HDR)圖像的圖像的方法。當我們使用相機拍攝照片時,每個顏色通道只有8位來表示場景的亮度。然而,我們周圍世界的亮度理論上可以從0(黑色)到幾乎無限(直視太陽)。因此,傻瓜相機或移動相機根據(jù)場景決定曝光設(shè)置,以便使用相機的動態(tài)范圍(0-255值)來表示圖像中最有趣的部分。例如,在許多相機中,使用面部檢測來查找面部并設(shè)置曝光,使得面部看起來很好。這引出了一個問題-我們可以在不同的曝光設(shè)置下拍攝多張照片并拍攝更大范圍的場景亮度嗎?答案是肯定的。傳統(tǒng)上使用HDR成像然后進行色調(diào)映射的方式。具體見上篇文章:python使用OpenCV獲取高動態(tài)范圍成像HDR

HDR成像要求我們知道精確的曝光時間。HDR圖像本身看起來很暗,看起來不太漂亮。DR圖像中的最小強度為0,但理論上沒有最大值。所以我們需要將其值映射到0到255之間,以便我們可以顯示它。將HDR圖像映射到常規(guī)的每通道8位彩色圖像的過程稱為色調(diào)映射。如您所見,組裝HDR圖像和色調(diào)映射有點麻煩。我們不能不使用HDR就使用多個圖像創(chuàng)建色調(diào)映射圖像。結(jié)果證明我們可以用曝光融合來實現(xiàn)。

2 曝光融合的原理

應(yīng)用曝光融合的步驟如下所述:

  • 使用不同曝光拍攝多張圖像

首先,我們需要在不移動相機的情況下捕獲同一場景的一系列圖像。如上所示,序列中的圖像具有不同的曝光。這是通過改變相機的快門速度來實現(xiàn)的。通常,我們選擇一些曝光不足的圖像,一些曝光過度的圖像和一個正確曝光的圖像。

在“正確”曝光的圖像中,選擇快門速度(由相機或攝影師自動選擇),以便每通道8位動態(tài)范圍用于表示圖像中最有趣的部分。太暗的區(qū)域被剪切為0,而太亮的區(qū)域被飽和到255。

在曝光不足的圖像中,快門速度很快,圖像很暗。因此,圖像的8位用于捕獲亮區(qū)域,而暗區(qū)域被剪切為0。在曝光過度的圖像中,快門速度較慢,因此傳感器捕獲的光線更多,因此圖像更亮。傳感器的8位用于捕獲暗區(qū)域的強度,而亮區(qū)域飽和到255的值。大多數(shù)單反相機都有一個稱為自動曝光包圍(AEB)的功能,只需按一下按鈕,我們就可以在不同曝光下拍攝多張照片。當我們在iPhone中使用HDR模式時,它需要三張照片(安卓可以下載超級相機這個軟件)。

圖像對齊:

即使使用三腳架獲取序列中的圖像也需要對齊,因為即使較小的相機抖動也會降低最終圖像的質(zhì)量。OpenCV提供了一種使用對齊這些圖像的簡便方法AlignMTB。該算法將所有圖像轉(zhuǎn)換為中值閾值位圖(MTB)。通過將值1分配給比中值亮度更亮的像素來計算圖像的MTB,否則為0。MTB 對曝光時間不變。因此,可以對準MTB而無需我們指定曝光時間。

圖像融合:

具有不同曝光的圖像捕獲不同范圍的場景亮度。根據(jù)Tom Mertens,Jan KautzFrank Van Reeth 題為Exposure Fusion的論文。論文見:曝光融合通過僅保留多重曝光圖像序列中的“最佳”部分來計算所需圖像。

作者提出了三個質(zhì)量指標:

1曝光良好:如果序列中的圖像中的像素接近零或接近255,則不應(yīng)使用該圖像來查找最終像素值。其值接近中間強度(128)的像素是比較合適的。

2對比度:高對比度通常意味著高品質(zhì)。因此,對于該像素,給予特定像素的對比度值高的圖像具有更高的權(quán)重。

3飽和度:類似地,更飽和的顏色更少被淘汰并且代表更高質(zhì)量的像素。因此,特定像素的飽和度高的圖像被賦予該像素的更高權(quán)重。

三種質(zhì)量度量用于創(chuàng)建權(quán)重圖 該權(quán)重圖表示, 圖像在位置處的像素的最終強度中的貢獻, 對權(quán)重圖,進行歸一化,使得對于任何像素所以所有圖像的貢獻總計為1。

結(jié)合權(quán)重圖使用以下等式組合圖像是很有效的:

其中,,是原始圖像,9, 是輸出圖像。問題在于,由于像素是從不同曝光的圖像中拍攝的,因此

使用上述等式獲得的輸出圖像將顯示許多裂縫。該論文的作者使用拉普拉斯金字塔來混合圖像。我們將在以后的文章中介紹這項技術(shù)的細節(jié)。

幸運的是使用OpenCV,這種圖像曝光融合合并只是使用MergeMertens該類的兩行代碼。請注意,這個名字取決于Exposure Fusion論文的第一作者Tom Mertens 。

3 代碼與結(jié)果

代碼地址:

C++:

#include "pch.h"
#include <iostream>
#include <opencv2/opencv.hpp>
#include <vector>
#include <fstream>
using namespace cv;
using namespace std;
// Read Images
void readImages(vector<Mat> &images)
{
    int numImages = 16;
    static const char* filenames[] =
    {
      "image/memorial0061.jpg",
      "image/memorial0062.jpg",
      "image/memorial0063.jpg",
      "image/memorial0064.jpg",
      "image/memorial0065.jpg",
      "image/memorial0066.jpg",
      "image/memorial0067.jpg",
      "image/memorial0068.jpg",
      "image/memorial0069.jpg",
      "image/memorial0070.jpg",
      "image/memorial0071.jpg",
      "image/memorial0072.jpg",
      "image/memorial0073.jpg",
      "image/memorial0074.jpg",
      "image/memorial0075.jpg",
      "image/memorial0076.jpg"
    };
    //讀圖
    for (int i = 0; i < numImages; i++)
    {
        Mat im = imread(filenames[i]);
        images.push_back(im);
    }
}
int main()
{
    // Read images 讀取圖像
    cout << "Reading images ... " << endl;
    vector<Mat> images;

    //是否圖像映射
    bool needsAlignment = true;

    // Read example images 讀取例子圖像
    readImages(images);
    //needsAlignment = false;

    // Align input images
    if (needsAlignment)
    {
        cout << "Aligning images ... " << endl;
        Ptr<AlignMTB> alignMTB = createAlignMTB();
        alignMTB->process(images, images);
    }
    else
    {
        cout << "Skipping alignment ... " << endl;
    }
    // Merge using Exposure Fusion 圖像融合
    cout << "Merging using Exposure Fusion ... " << endl;
    Mat exposureFusion;
    Ptr<MergeMertens> mergeMertens = createMergeMertens();
    mergeMertens->process(images, exposureFusion);

    // Save output image 圖像保存
    cout << "Saving output ... exposure-fusion.jpg" << endl;
    imwrite("exposure-fusion.jpg", exposureFusion * 255);

    return 0;
}

Python:

import cv2
import numpy as np
import sys
def readImagesAndTimes():
  filenames = [
               "image/memorial0061.jpg",
               "image/memorial0062.jpg",
               "image/memorial0063.jpg",
               "image/memorial0064.jpg",
               "image/memorial0065.jpg",
               "image/memorial0066.jpg",
               "image/memorial0067.jpg",
               "image/memorial0068.jpg",
               "image/memorial0069.jpg",
               "image/memorial0070.jpg",
               "image/memorial0071.jpg",
               "image/memorial0072.jpg",
               "image/memorial0073.jpg",
               "image/memorial0074.jpg",
               "image/memorial0075.jpg",
               "image/memorial0076.jpg"
               ]
  images = []
  for filename in filenames:
    im = cv2.imread(filename)
    images.append(im)
  return images
if __name__ == '__main__':
  # Read images
  print("Reading images ... ")

  if len(sys.argv) > 1:
    # Read images from the command line
    images = []
    for filename in sys.argv[1:]:
      im = cv2.imread(filename)
      images.append(im)
    needsAlignment = False
  else :
    # Read example images
    images = readImagesAndTimes()
    needsAlignment = False
  # Align input images
  if needsAlignment:
    print("Aligning images ... ")
    alignMTB = cv2.createAlignMTB()
    alignMTB.process(images, images)
  else :
    print("Skipping alignment ... ")
  # Merge using Exposure Fusion
  print("Merging using Exposure Fusion ... ");
  mergeMertens = cv2.createMergeMertens()
  exposureFusion = mergeMertens.process(images)
  # Save output image
  print("Saving output ... exposure-fusion.jpg")
  cv2.imwrite("exposure-fusion.jpg", exposureFusion * 255)

本文第一張圖獲得的不同曝光的圖像,通過這種方法所得結(jié)果如下:

在輸入圖像中,我們可以獲得過度曝光圖像中光線昏暗區(qū)域和曝光不足圖像中明亮區(qū)域的細節(jié)。但是,在合并的輸出圖像中,像素在圖像的每個部分都具有明亮的細節(jié)。我們還可以在之前的帖子中看到我們用于HDR成像的圖像的這種效果。用于產(chǎn)生最終輸出的四個圖像顯示在左側(cè),輸出圖像顯示在右側(cè)。結(jié)果如下圖所示:

正如您在本文中所看到的,Exposure Fusion允許我們在不明確計算HDR圖像的情況下實現(xiàn)類似于HDR + Tonemapping的效果。因此,我們不需要知道每張圖像的曝光時間,但我們能夠獲得非常合理的結(jié)果。那么,為什么要費心去做HDR呢?好吧,在很多情況下,Exposure Fusion產(chǎn)生的輸出可能不符合您的喜好。沒有旋鈕可以調(diào)整以使其變得不同或更好。另一方面,HDR圖像捕獲場景的原始亮度。如果您不喜歡色調(diào)映射的HDR圖像,請嘗試使用不同的色調(diào)映射算法。總之,Exposure Fusion代表了一種權(quán)衡。在速度和不太嚴格的要求下使得算法更加靈活(例如,不需要暴露時間)

到此這篇關(guān)于python 使用OpenCV進行曝光融合的文章就介紹到這了,更多相關(guān)OpenCV曝光融合內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用python實現(xiàn)自動化控制電腦版微信

    使用python實現(xiàn)自動化控制電腦版微信

    這篇文章主要為大家詳細介紹了如何通過Python去調(diào)用Windows API實現(xiàn)模擬人工操作的方式去實現(xiàn)控制微信電腦版,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-10-10
  • Python獲取本機IP/MAC多網(wǎng)卡方法示例

    Python獲取本機IP/MAC多網(wǎng)卡方法示例

    這篇文章主要為大家介紹了Python獲取本機IP/MAC多網(wǎng)卡方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • 簡單了解python模塊概念

    簡單了解python模塊概念

    這篇文章主要介紹了簡單了解python模塊概念,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Python?生成器yield原理及用法

    Python?生成器yield原理及用法

    這篇文章主要介紹了Python?生成器yield原理及用法,yield?是實現(xiàn)生成器方法之一,當函數(shù)使用yield方法,則該函數(shù)就成為了一個生成器,更多相關(guān)資料需要的小伙伴可以參考一下下面文章內(nèi)容
    2022-06-06
  • Python封裝shell命令實例分析

    Python封裝shell命令實例分析

    這篇文章主要介紹了Python封裝shell命令,實例分析了Python將各種常用shell命令封裝進一個類中以便調(diào)用的方法,非常具有實用價值,需要的朋友可以參考下
    2015-05-05
  • Python打印詳細報錯日志logging問題

    Python打印詳細報錯日志logging問題

    這篇文章主要介紹了Python打印詳細報錯日志logging問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • error?conda:ProxyError:Conda?cannot?proceed?due?to?an?error?in?your?proxy?configuration解決

    error?conda:ProxyError:Conda?cannot?proceed?due?to?an?

    這篇文章主要為大家介紹了error conda:ProxyError:Conda cannot proceed due to an error in your proxy configuration解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • python Django 創(chuàng)建應(yīng)用過程圖示詳解

    python Django 創(chuàng)建應(yīng)用過程圖示詳解

    這篇文章主要介紹了python Django 創(chuàng)建應(yīng)用過程圖示詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • 基于python使用OpenCV進行物體輪廓排序

    基于python使用OpenCV進行物體輪廓排序

    這篇文章主要介紹了基于python使用OpenCV進行物體輪廓排序,在進行圖像處理過程中,我們經(jīng)常會遇到一些和物體輪廓相關(guān)的操作,我們直接使用Opencv的findContours函數(shù)可以很容易的得到每個目標的輪廓,但是可視化后,?這個次序是無序的,更多相關(guān)資料請參考下面文章內(nèi)容
    2022-01-01
  • 利用Pandas和Numpy按時間戳將數(shù)據(jù)以Groupby方式分組

    利用Pandas和Numpy按時間戳將數(shù)據(jù)以Groupby方式分組

    這篇文章主要介紹了利用Pandas和Numpy按時間戳將數(shù)據(jù)以Groupby方式分組,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07

最新評論

高阳县| 平陆县| 柳林县| 镇原县| 阜平县| 泾阳县| 水城县| 旌德县| 乳山市| 丹东市| 嵩明县| 绥宁县| 花莲市| 安仁县| 和田市| 韶关市| 石嘴山市| 天峻县| 饶平县| 大余县| 松原市| 铜鼓县| 桃园县| 天门市| 晋州市| 中方县| 汝城县| 邻水| 嘉义市| 手机| 金秀| 平阳县| 康马县| 天津市| 开原市| 长宁区| 莱州市| 河源市| 长垣县| 泰和县| 灵丘县|