從泊松方程的解法,聊到泊松圖像融合

2020-12-04 雷鋒網

雷鋒網 AI 科技評論按,本文作者成指導,字節跳動算法工程師,本文首發於知乎,雷鋒網(公眾號:雷鋒網) AI 科技評論獲其授權轉載,正文內容如下:

2004 年 SIGGRAPH 上,Microsoft Research UK 有篇經典的圖像融合文章《Poisson Image Editing》。先看看其驚人的融合結果(非論文配圖,本人實驗結果):

這篇文章的實現,無關目前算法領域大火的神經網絡,而是基於泊松方程推導得出。

泊松方程是什麼?

很多朋友比較熟悉概率論裡面的泊松分布。泊松方程,也是同一個數學家泊松發明的。但卻和泊松分布沒有什麼關係,是泊松物理學領域提出的一個偏微分方程。

這裡表示的是拉普拉斯算子,和 (在泊松方程中是已知量)可以是實數或複數值方程,特殊情況當時被稱為拉普拉斯方程。當處於歐幾裡得空間時,拉普拉斯算子通常表示為。

學習圖像處理的朋友對於和比較熟悉,分別表示二階微分(直角坐標系下的散度)、一階微分(直角坐標系下的梯度)。

微分與卷積

連續空間中的微分計算,就是大學裡微積分那一套公式。但是在計算機的世界裡,數據都是在離散空間中進行表示,對於圖像而言,基本的計算單元就是像素點。讓我們從最簡單的情形,一維數組的微分說起:

 表示位置 x 一階微分計算(一階中心導):

 

表示位置 x 二階微分計算(二階中心導): 

隨著,上面的微分算式的結果會逐漸逼近真實的微分值。對於圖像而言,這裡 h 最小可分割單元是像素,也就表示像素間的間距,可視為 1。再看看,二階微分的公式,是不是可以看成的卷積核在一維數組上進行卷積計算的結果(卷積中心在 x 上)。

至此,不難理解,離散數據(例如圖像)上的微分操作完全可以轉換為卷積操作。

當數組維度更高,變成二維數組呢?也就是處理圖像的拉普拉斯算子: 

此時,卷積核尺寸應該是,具體數值為,稱為拉普拉斯卷積核。

記住拉普拉斯卷積核,我們後面會用到。

泊松方程求解

這個時候,想想我們學會了什麼?泊松方程的形式,以及拉普拉斯卷積核。

再想想,在圖像場景下,什麼是泊松方程的核心問題?

已知圖像點二階微分值(直角坐標系下即散度 div)的情況下,求解各個圖像點的像素值。

一個簡單的例子,假設有一張  的圖像,表示各個位置上的圖像像素值,共 16 個未知參數需要被求解。

應用拉普拉斯卷積核後,得到 4 個方程式:

4 個方程式求解出 16 個未知參數?這是不可能的。

因此,我們需要另加入至少 12 個更多的方程式,也就是說,需要把剩餘 12 個邊界點的值確定,即需要確定邊界條件。邊界一般符合 2 種常見的邊界條件:

但給定邊界條件之後,就可以有 16 個方程式組成的方程組了,矩陣化表示此方程組之後,得到形式為  。

看到,大家就應該放鬆了,不就是解方程嘛,用雅可比迭代法或者高斯賽德爾迭代法來求解就 OK 了。

Poisson Image Editing

背景知識儲備好了後,讓我們把目光拉回到論文《Poisson Image Editing》上。

在圖像融合任務中,前景放置在背景上時,需要保證兩點:

重點關注兩個詞:內容平滑、邊界一致。平滑是什麼?可以理解成圖像前景、背景梯度相同。邊界一致是指什麼?可以理解成在邊界上像素值相同。再用一張圖來說明:

上圖中 u 表示需要被合成的前景圖片,V 是 u 的梯度場。S 是背景圖片,  是合併後目標圖像中被前景所覆蓋的區域,則是的邊界。設合併後圖像在 內的像素表示函數是 f,在 外的像素值表示函數是 。

此時,平滑可表示為: ;保持邊界一致可表示為: 。

這裡如果接觸過泛函的朋友會比較開心,沒接觸過的朋友可以先看看歐拉-拉格朗日方程。

令,

代入歐拉-拉格朗日方程後則有: 


注意:F 是 f 的函數,不是對 f 的,因此 


怎麼樣,看起來是不是一個泊松方程呢?當然,還差兩步:

  • 因為需要平滑,div v 取值需要同時參考前景圖片和背景圖片,可以直接等於前景像素的散度,也可以在前景和背景在同一點像素的散度進行某種組合得到(論文中在 Selection cloning 和 Selection editing 章節有討論各自合適的場景,但個人以為這裡採取學習的方法應該更魯棒,而不是用固定的策略來區分)。anyway,div v 是可以計算的已知量;

  • 因為需要保持邊界一致,邊界條件上像素值等於背景圖片即可。當然也可以做一些策略,但同樣也可以計算得到的已知量。

現在很輕鬆了,邊界條件已知、散度已知,在離散空間中求解泊松方程中的 f,參考上一節的求解過程即可。

代碼實現

函數代碼已經收錄在了 OpenCV 的官方函數 seamlessClone 裡:github source code

使用的時候,需要三張圖片:前景圖、背景圖、mask 圖(指明前景圖中需要融合的區域,最簡單的就是直接等於前景圖大小的 mask,待融合區域是白色,其餘位置黑色)。

下面我們使用 OpenCV 的 Python 接口來動手試試,用到以下兩張圖以及一段代碼:

foreground.jpg

background.jpg

import cv2

import numpy as np

# Read images : src image will be cloned into dst

dst = cv2.imread("background.jpg")

obj= cv2.imread("foreground.jpg")

# Create an all white mask

mask = 255 * np.ones(obj.shape, obj.dtype)

# The location of the center of the src in the dst

width, height, channels = im.shape

center = (height/2, width/2)

# Seamlessly clone src into dst and put the results in output

normal_clone = cv2.seamlessClone(obj, dst, mask, center, cv2.NORMAL_CLONE)

mixed_clone = cv2.seamlessClone(obj, dst, mask, center, cv2.MIXED_CLONE)

# Write results

cv2.imwrite("images/opencv-normal-clone-example.jpg", normal_clone)

cv2.imwrite("images/opencv-mixed-clone-example.jpg", mixed_clone)

最終效果如下:

雷鋒網版權文章,未經授權禁止轉載。詳情見轉載須知。

相關焦點

  • 牛頓力學的泊松方程
    西莫恩·德尼·泊松本文是從萬有引力定律出發,通過類比電場中高斯定律推出引力場中泊松方程。代入引力場和引力勢的關係去掉積分符合,得其中(▽▽=▽2=△)於是,得到了引力場中的泊松方程此方程是找到愛因斯坦場方程係數κ的關鍵點。
  • 泊松分布
    到目前為止,你的平均年收入約為8萬美元。今年,你覺得自己陷入了困境,決定要達到6位數。要做到這一點,你需要先計算這一令人興奮的成就發生的概率,但你不知道怎麼做。在世界上有許多場景,其中存在某個隨機事件的已知概率,企業希望發現該事件在未來發生的概率大於或小於這個概率。
  • 泊松分布在足球博彩中的實際應用
    首先,泊松分布是以法國數學家泊松(1781~1840) 命名的,這哥們厲害了,他是19世紀概率統計領域裡的卓越人物,在數學統計領域中以他命名的理論除了泊松分布外,還有:泊松定理、泊松公式、泊松方程、泊松過程、泊松積分、泊松級數
  • 圖解泊松分布與二項分布之差別
    泊松分布刻畫了稀有事件在一段時間內發生次數這一隨機變量的分布,如電話交換臺單位時間內接到的呼喚次數等。
  • 光的故事(六)泊松亮斑實驗,一個泊松不願意掛名的實驗
    法國科學院這個競賽評委會由許多知名科學家組成,包括拉普拉斯,泊松和比奧等微粒說的擁護者。在法國物理學家阿拉果和安培的鼓勵和支持下,波動說陣營的一顆新星菲涅爾向科學院提交了應徵論文。菲涅爾這篇論文遞交到委員會的時候,遭到了委員會裡堅持微粒說的科學家的反對。
  • 泊松分布與二項分布
    如果我們學習的意義是為了通過考試,那麼我們大可停留在「只會做題」的階段,因為試卷上不會出現「請發表一下你對泊松公式的看法」這樣的題目,因為那樣一來卷子就變得不容易批改。所以現在的大部分考試都會出一些客觀題。而如果我們學習的目的是為了理解一樣東西,那麼我們就有必要停下來去思考一下諸如「為什麼要有泊松分布?」、「泊松分布的物理意義是什麼?」這樣的「哲學」問題。
  • 泊松分布及其實際應用場景
    因為新書中增添和細化了很多知識點,所以草堂君會逐步將這些內容補充到統計基礎導航頁中來,幫助大家建立數據分析思維。限於篇幅,只截取書中部分內容。由於泊松分布適用於描述單位時間(或空間)內隨機事件發生的次數,因此它常用於預測某些事件的發生,例如某家醫院在一定時間內到達的人數;超市收銀臺在某段時間內的結帳人數;公交車站在某個時間段的候車人數等。 泊松分布推導泊松分布的概率質量函數可以由二項分布的概率質量函數推導而來,下面為大家列出推導過程。
  • 機器學習:泊松分布與指數分布
    打開APP 機器學習:泊松分布與指數分布 阮一峰 發表於 2017-11-29 03:44:03 我舉一個例子,什麼是泊松分布和指數分布
  • 簡述泊松分布假設條件
    基礎準備泊松分布概率公式推導自二項分布,因為換一種角度來看待它,它就是二項分布;回顧泊松分布公式推導過程及應用案例請點擊下方連結:
  • 從零開始學統計(五)——泊松分布
    。嗯,泊松分布既然是從二項分布推導出來的,那麼泊松分布的應用前提與二項分布一樣(回想一下!),外加一條:n很大且π很小,屬於稀有發生事件。泊松分布具有以下特性:1)總體的均數與方差相等,均為;2)具備「可加性」卻不具備「可乘性」;3)當
  • 二維晶體具有奇特彎曲泊松效應
    近日,南京航空航天大學機械結構力學與控制國家重點試驗室的納米力學研究團隊利用密度泛函原理研究發現了二維晶體中的彎曲泊松效應。
  • 如何理解泊松分布?
    公司樓下有家饅頭店:每天早上六點到十點營業,生意挺好,就是發愁一個事情,應該準備多少個饅頭才能既不浪費又能充分供應?老闆統計了一周每日賣出的饅頭(為了方便計算和講解,縮小了數據):上面就是泊松分布的概率密度函數,也就是說,在
  • 為什麼電話呼叫次數服從泊松分布?
    這裡,我們來討論一下泊松分布在電話呼叫中心資源配置中的應用。泊松分布適合於描述單位時間內隨機事件發生的次數。如某一服務設施在一定時間內到達的人數,電話交換機接到呼叫的次數,汽車站臺的候客人數,機器出現的故障數,自然災害發生的次數等等。若隨機變量X取0和一切正整數值,在n次獨立試驗中出現的次數x恰為k次的概率P(X=k)=(k=0,1,…,n),式中λ是一個大於0的參數,此概率分布稱為泊松分布。
  • Excel的統計方法:泊松分布的計算過程圖文
    一、 目標: 本節主要通過體例講解泊松分布的計算過程。 二、定義: Poisson分布,是一種統計與概率學裡常見到的離散概率分布,由法國數學家西莫恩·德尼·泊松(Siméon-Denis Poisson)在1838年時發表。 二項分布中,當n趨於無窮大時,p趨於0,此時事件發生的概率是服從泊松分布的。
  • 10分鐘讓你理解泊松分布、指數分布
    我舉一個例子,什麼是泊松分布和指數分布?恐怕大多數人都說不清楚。我可以在10分鐘內,讓你毫不費力地理解這兩個概念。日常生活中,大量事件是有固定頻率的。上面就是泊松分布的公式。泊松分布的圖形大概是下面的樣子。
  • 六西格瑪管理基礎-常用離散分布之-泊松分布
    ,取這些值的概率為:此時,稱X服從泊松分布。「入」是泊松分布的重要參數,它給出了產品的平均不合格項數。泊松分布的數學期望-均值、方差、標準差由下面的公式給出。泊松分布的圖形表示如下當二項分布的n很大而p很小時,泊松分布可作為二項分布的近似,其中λ為np。通常當n≧20,p≦0.05時,就可以用泊松公式近似計算。
  • 原創 | 一文讀懂泊松分布,指數分布和伽馬分布
    我們回到泊松分布。真實世界中有很多場景都和泊松分布有關,比如某網站在某段時間內的點擊率;客服中心在某段時間內接到電話的次數;醫院在某段時間內接生的嬰兒;放射性元素在某段時間內衰變的粒子個數……事實上我們通過上面的推導過程也能看出:當
  • 泊松回歸可以用來做什麼?
    接下來,本文將要介紹的這個回歸模型是專門針對計數數據的泊松回歸模型。泊松分布說到泊松回歸,首先要了解,什麼是泊松分布?持續記錄下去,你就可以得到一個模型,這便是「泊松分布」的原型。除此以外,現實生活中還有很多情況是服從泊松分布的:10分鐘內從ATM中取錢的人數一天中發生車禍的次數每100萬人中患癌症的人數單位面積土地內昆蟲的數目
  • 普渡大學教授首次發現天然材料磷烯存在負泊松比特性
    這種有悖常理的現象稱為負泊松比特性,研究人員已針對此特性進行了廣泛的研究,未來這種工程材料可能會應用於醫療、組織工程學、防彈衣和「強化護甲優化處理」等領域。 這種負泊松比行為是研究人員在研究一種從黑磷中剝離出的二維材料磷烯時發現的。泊松比是材料的基本力學性能之一,泊松比描述了材料在拉伸作用下發生的物理變化。
  • 聞名的四大反證物理實驗,推翻了主流學說,第一篇:泊松亮斑
    第一個實驗:泊松亮斑要說清楚這個實驗,必需回到18世紀時期,關於光是粒子還是波的爭論背景。但是,託馬斯—楊在英國宣傳自己的實驗和光的波動理論時,卻招到了嘲笑和排擠,因為那時候的英國物理學,牛頓是神一般的存在,反對牛頓光粒子學說,就是反對主流和權威學說,更何況是早被否定的胡克、惠更斯的光波動理論。