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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

计算机视觉预备知识,计算机视觉:泊松融合

發布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 计算机视觉预备知识,计算机视觉:泊松融合 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Poisson Blending4:更多用途

Poisson Blending0:預備知識(圖像的梯度、泊松方程)

進入正題之前,我們先補充一下基礎知識。圖像的梯度

什么是圖像的梯度?我們可以把圖像看成是一個離散的函數,函數在某一點的梯度是它的導數,那么根據導數的定義,我們可以把圖像在某一點的梯度定義為:下一個點的像素值-這個點的像素值,即g(i)=f(i+1)-f(i)。至于下一個像素點在那個位置,要根據方向來定。例如行梯度就是右邊的相鄰點(g(x,y)=f(x+1,y)-f(x,y)),列梯度就是下方的相鄰點(g(x,y)=f(x,y+1)-f(x,y))。那么圖像的梯度表示什么意思呢?很明顯,就是相鄰兩個像素的差異大小。為了直觀表示,我們可以試著表示出一個圖像的梯度:

原圖; x方向的梯度; y方向的梯度雖然有些費力,但你應該能看出,梯度圖像其實是把邊緣檢測了出來。當然,檢測邊緣有更加復雜的filter。

泊松方程

柏松方程的表示為

它在物理上有很多應用,例如表示電荷分布與電勢的關系,或者重力加速度和密度的關系等等。當然,我們學習泊松融合并不需要了解這些知識,感興趣的話,你需要學習大學物理(B)第二冊:)。圖像處理上,則是借鑒了泊松方程以及其他物理分析闡明的函數f、f的梯度(一階算子)以及f的二階梯度(拉普拉斯算子)之間的關系。你同樣不需要了解這些名詞的意義,不過有一點要知道:梯度表示了函數變化的趨勢。

為什么要知道這一點?因為泊松融合的思想并不是讓兩幅圖疊加,而是讓目標圖像在融合部分“生長”出源圖像。也就是說,只提供原圖像的斜率,讓目標圖像根據自己圖像的特點,按照對應斜率生成融合部分。由于是按照自己的特點,并沒有添加外來的元素,生成的圖片就更加自然。

打個比方來說:如果要融合兩座山峰(A山表示為1 2 3 2 2 1, B山表示為12 14 13 14 15 14, 數值表示高度),直接對半拼起來肯定會不自然(取A左邊+B右邊:1 2 3 14 15 14);如果把其中B山峰生長的趨勢記下來(表示為梯度:2 -1 1 1 -1),然后在另一座山峰的融合處上按照此趨勢“生長”出另一座山峰,就顯得更加自然(結果為C山:1 2 3 4 5 4)。

Poisson Blending1:泊松方程應用于圖像

在泊松融合中,我們真正要處理的是這樣一個函數

別犯暈!我來解釋一下是什么意思:如果要把圖像B融合在圖像A上,那么f表示融合的結果圖像C(也就是我們要求的圖像)(相當于C山),f*表示目標圖像A(相當于A山),v表示源圖像B的梯度(相當于B山的梯度),▽f表示f的一階梯度(也就是圖像的梯度),Ω表示要融合的區域,由于那個卷曲的字母我打不出來,就用d代替,dΩ代表融合區域的邊緣部分。那么這個式子可以解釋為:在目標圖像A邊緣不變的情況下,求融合部分的圖像C,使得C在融合部分的梯度與源圖像B在融合部分的梯度最為接近(也就是生長趨勢最接近)。

這里有人可能會有疑問:如果梯度最接近的話,直接復制過去不就好了么?我們要注意到,這里有一個條件:C的融合邊緣與A的融合邊緣相等。如果直接把B復制過去,內部的梯度是與B相等了,但是邊緣就會有問題,這個結果往往并不是上式的最小值。

所以我們從邊緣出發,要求得一個生成圖,滿足邊緣不會突變,而且融合部分的變化趨勢幾乎符合源圖像的變化趨勢,這樣的結果就是我們想要的。

如果你仍有困惑,可以嘗試理解一下一維上的解釋,假設我有一個函數f,它在一部分區域上的斜率如下圖(1);另一個函數g,它的斜率如下圖(2)。我們如何更自然地融合兩個函數?如果斜率有突變,就會使得融合的結果不自然(下圖(3)),因此我們應該盡量使斜率連續,這里就需要在保持f在區域邊界上不變的情況下,生成區域中的斜率使之最為接近g的對應區域中的斜率(下圖(4))。

目標區域f函數的斜率g函數的斜率

不自然的融合(直接拷貝)自然的融合(泊松融合)

始終注意,我們這里討論的是融合二者的斜率(高維上叫 梯度),而不是二者的函數值。斜率連續變化,函數就不會有突兀的改變。

Poisson Blending2:解泊松方程

在弄清楚整個算法之后,我們就可以開始求最優函數了。但如何求一個函數的最小值呢?這里,我們繼續考慮函數的梯度問題。

對于一個連續函數f,它的最大/小值點的梯度值一定為0——這應該是眾所周知。我們就以此作為切入點,用梯度為0來作為最優函數的條件。

這里你可能會問,如果是求到最大值怎么辦?對于這個函數來講,由于距離可以無限遠,但最小只能為0,因此它擁有最小值,而沒有最大值,所以梯度為0的點必定是最小值點。

這個函數梯度為0的表示可以轉化為我們剛剛講到的泊松方程:

再解釋一下這個等式:Δ表示拉普拉斯算子,也就是二階梯度(一階梯度▽f再求一次梯度啦)。div(Divergence,也就是▽)表示v的梯度,也就是▽B的梯度(B是源圖像)。如果你又亂了,就把它理解為:源圖像B的二次梯度與新圖像C的二次梯度相同。

好嘞,有了這個等式,我們就有了確定的方法來求解目標圖像了。但是由于圖像是離散的,我們需要把上面的等式變換一下,符合圖像的特點。首先根據梯度的定義,我們先明確下二階梯度的表示:

一個點上圖像梯度的簡單定義:該像素與周圍像素的差值的和(對于不在邊緣的像素點,是與四個周圍像素的差值)。比較詳細的一個推導圖像二次梯度的文章可以看這里

好,那么我們就可以把上方的等式轉換為下面的差分方程(總結了每一個Ω內部像素點的所有情況):

如果H表示新的圖像,一個相鄰像素是(1)邊界像素,那么它的值是固定的(因為我們要保留邊界值);(2)超出選區邊界,被排除。N表示H(x,y)鄰居像素點數目(< =4,如果此點位于圖像邊界那么他可能只有2個或3個鄰居像素),而左邊公式的最后一項則表示如果該像素點的鄰居是選區邊界的話,那么就直接用源圖像A中對應點的值。右邊表示目標圖像B在此點的二階梯度。

于是我們可以開始解方程啦!上式中,與H有關的都是未知數,我們需要做的是把這些像素的值求出來。

關鍵問題是,一個融合區域有那么多的未知數,他們互相關聯,怎么求呢?這里如果我們把求二階梯度(也就是式子左邊)看成一個n *n(n表示要填充的像素總數)矩陣A,把未知區域的H看做是未知數x,把已知的源圖像B的二階梯度(也就是式子的右邊)看做是一個(n*1)列矩陣B,那么問題的本質就是求解Ax=B的問題。

矩陣形式的表示:

這是優化領域內一個大的學問。很多適用于計算機的方法被提出。因為A巨大(未知數太多了),所以常規求A逆的計算復雜度簡直是爆炸級別,所以人們提出了一些迭代方法來求解。最最經典也是最最基礎的叫做牛頓迭代法[3],大家可以參考鏈接學習。在這里我們不講這些方法的理論基礎以及證明(那樣我又要寫最少十幾頁),如果感興趣,可以參考雅克比迭代法[4] 共軛梯度法[5] 以及十分全面且由淺入深的關于共軛梯度法的 講解材料[6](雖然很長,但不痛苦,看完絕對收獲頗豐)。

當然,還有tons of better methods,但是由于太complicated,我們在這里使用Jacobi來入門,然后實際運用CG(共軛梯度)方法。

以下就來詳細講一講如何把Jacobi應用到這個問題上來。

通過參照wikipedia上的講解,我們看到矩陣A可以被分解為一個對角矩陣D以及對角為0矩陣R的和,然后每一步迭代的步驟是X(k+1)=D-1(b-RX(k))。我們可以設置X(0)=0,然后迭代足夠多次(例如5000),得到的結果就已經比較滿意。或者把停止條件設置成偏差值小于某個數也可以。

針對特定問題,b代表源圖像在融合區域的二次梯度的矩陣,我們可以先把目標圖像的融合區域全設置成0(也就是黑色)。怎么表示RX(k)呢?我們注意到,如果按照上面那個最長公式,我們列出當填充區域是3*3矩陣的時候,A應該長著個樣子:

那么A在分解后,R就應該是這個樣子:

所以我們只需要對融合區域作用一個這個樣子的filter來掃描一遍就可以的到RX(k)

由于D-1是對角矩陣,而D的對角元素都是-4,因此我們只需要簡簡單單地讓(b-RX(k))乘以-1/4就好,然后把結果賦值給下一個X(k+1),如此循環往復。

這樣下來,融合100*100的圖像區域大約會消耗40-50秒的時間,當然,如果運用CG的方法,會達到20-30秒,更快一些。

Poisson Blending3:混合泊松融合

在融合的時候,如果目標圖像是有紋理的物體,比如棵樹干,或者一個橘子,我們希望融合后的圖像也具有這樣的紋理,應該怎么辦呢?如果用我們上面的方法,最好的結果是這樣:

注意看眼睛周圍的皮膚部分,并沒有橘子皮一樣的紋理。

再比如如果我們把一幅圖融合到一張布匹的圖片上,想讓融合出的結果具有布匹的紋理,這些都該如何做呢?

實際上,我們只要對上面公式的參數做小小的改動,就可以得到新的結果。來想一下,紋理在圖像的梯度層面表示了什么含義?紋理越多,對應的梯度圖像中邊緣也就越多,也就是說,圖像中梯度不為0的地方也就越多。那么我們只需要對原式中的V做一個小小的改動,原先V表示為源圖像的梯度圖像,而現在我們把它表示為 源圖像梯度圖像 與 目標圖像梯度圖像 對應像素絕對值 的 最大值。也就是Vpq = fp??fq? if|fp??fq?|>|gp?gq|,或者gp ? gq if|fp??fq?|<=|gp?gq|.

這樣,我們就保留了原圖的紋理,又合成了新圖的圖案。

不過我在做這個步驟的時候,加入了少許創新:我讓兩個圖像在低頻部分泊松融合,高頻部分直接保留原圖(因為高頻代表細節、紋理而且不包括顏色信息)。這樣的結果似乎效果不錯,比如下左是一幅有做舊效果的蒙娜麗莎,注意它的紋理是很多不規則的小點;右邊是要融合的比爾蓋茨的臉:

在運用了我的效果之后,融合成新的蒙娜蓋茨,依然保留了紋理信息(圖掛了,不好意思。。。)

另外,這種方法也可以融合透明的物體,比如彩虹。

Poisson Blending4:更多用途

泊松融合還可以做什么?比如“紋理壓平”技術(就是把3D的拍扁成2D),或者對局部顏色的調節。總之,如果你想更深入全面地了解這項技術,最好去參閱下這篇經典的論文[1]

Reference

總結

以上是生活随笔為你收集整理的计算机视觉预备知识,计算机视觉:泊松融合的全部內容,希望文章能夠幫你解決所遇到的問題。

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