丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
人工智能學(xué)術(shù) 正文
發(fā)私信給汪思穎
發(fā)送

0

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

本文作者: 汪思穎 2019-06-17 15:11
導(dǎo)語:經(jīng)典圖像融合算法解讀

雷鋒網(wǎng) AI 科技評論按,本文作者成指導(dǎo),字節(jié)跳動(dòng)算法工程師,本文首發(fā)于知乎,雷鋒網(wǎng) AI 科技評論獲其授權(quán)轉(zhuǎn)載,正文內(nèi)容如下:

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

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

這篇文章的實(shí)現(xiàn),無關(guān)目前算法領(lǐng)域大火的神經(jīng)網(wǎng)絡(luò),而是基于泊松方程推導(dǎo)得出。

泊松方程是什么?

很多朋友比較熟悉概率論里面的泊松分布。泊松方程,也是同一個(gè)數(shù)學(xué)家泊松發(fā)明的。但卻和泊松分布沒有什么關(guān)系,是泊松物理學(xué)領(lǐng)域提出的一個(gè)偏微分方程。

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

這里從泊松方程的解法,聊到泊松圖像融合表示的是拉普拉斯算子,從泊松方程的解法,聊到泊松圖像融合從泊松方程的解法,聊到泊松圖像融合 (從泊松方程的解法,聊到泊松圖像融合在泊松方程中是已知量)可以是實(shí)數(shù)或復(fù)數(shù)值方程,特殊情況當(dāng)從泊松方程的解法,聊到泊松圖像融合時(shí)被稱為拉普拉斯方程。當(dāng)處于歐幾里得空間時(shí),拉普拉斯算子通常表示為從泊松方程的解法,聊到泊松圖像融合。

學(xué)習(xí)圖像處理的朋友對于從泊松方程的解法,聊到泊松圖像融合從泊松方程的解法,聊到泊松圖像融合比較熟悉,分別表示二階微分(直角坐標(biāo)系下的散度)、一階微分(直角坐標(biāo)系下的梯度)。

微分與卷積

連續(xù)空間中的微分計(jì)算,就是大學(xué)里微積分那一套公式。但是在計(jì)算機(jī)的世界里,數(shù)據(jù)都是在離散空間中進(jìn)行表示,對于圖像而言,基本的計(jì)算單元就是像素點(diǎn)。讓我們從最簡單的情形,一維數(shù)組的微分說起:

 從泊松方程的解法,聊到泊松圖像融合表示位置 x 一階微分計(jì)算(一階中心導(dǎo)):

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

從泊松方程的解法,聊到泊松圖像融合表示位置 x 二階微分計(jì)算(二階中心導(dǎo)): 

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

隨著從泊松方程的解法,聊到泊松圖像融合,上面的微分算式的結(jié)果會(huì)逐漸逼近真實(shí)的微分值。對于圖像而言,這里 h 最小可分割單元是像素,也就表示像素間的間距,可視為 1。再看看,二階微分的公式,是不是可以看成從泊松方程的解法,聊到泊松圖像融合的卷積核從泊松方程的解法,聊到泊松圖像融合在一維數(shù)組上進(jìn)行卷積計(jì)算的結(jié)果(卷積中心在 x 上)。

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

當(dāng)數(shù)組維度更高,變成二維數(shù)組呢?也就是處理圖像的拉普拉斯算子: 

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

此時(shí),卷積核尺寸應(yīng)該是從泊松方程的解法,聊到泊松圖像融合,具體數(shù)值為從泊松方程的解法,聊到泊松圖像融合,稱為拉普拉斯卷積核。

記住拉普拉斯卷積核,我們后面會(huì)用到。

泊松方程求解

這個(gè)時(shí)候,想想我們學(xué)會(huì)了什么?泊松方程的形式,以及拉普拉斯卷積核。

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

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

一個(gè)簡單的例子,假設(shè)有一張 從泊松方程的解法,聊到泊松圖像融合 的圖像從泊松方程的解法,聊到泊松圖像融合,從泊松方程的解法,聊到泊松圖像融合表示各個(gè)位置上的圖像像素值,共 16 個(gè)未知參數(shù)需要被求解。

應(yīng)用拉普拉斯卷積核后,得到 4 個(gè)方程式:

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

4 個(gè)方程式求解出 16 個(gè)未知參數(shù)?這是不可能的。

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

  • Neumann 邊界,譯為紐曼邊界或黎曼邊界,給出函數(shù)在邊界處的二階導(dǎo)數(shù)值;

  • Dirichlet 邊界,狄利克雷邊界,給出邊界處函數(shù)在邊界處的實(shí)際值。

但給定邊界條件之后,就可以有 16 個(gè)方程式組成的方程組了,矩陣化表示此方程組之后,得到形式為 從泊松方程的解法,聊到泊松圖像融合 。

看到從泊松方程的解法,聊到泊松圖像融合,大家就應(yīng)該放松了,不就是解方程嘛,用雅可比迭代法或者高斯賽德爾迭代法來求解就 OK 了。

Poisson Image Editing

背景知識(shí)儲(chǔ)備好了后,讓我們把目光拉回到論文《Poisson Image Editing》上。

在圖像融合任務(wù)中,前景放置在背景上時(shí),需要保證兩點(diǎn):

  • 前景本身主要內(nèi)容相比于背景而言,盡量平滑;

  • 邊界處無縫,即前景、背景在邊界點(diǎn)位置上的像素值,需要保持邊界一致。

重點(diǎn)關(guān)注兩個(gè)詞:內(nèi)容平滑、邊界一致。平滑是什么?可以理解成圖像前景、背景梯度相同。邊界一致是指什么?可以理解成在邊界上像素值相同。再用一張圖來說明:

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

上圖中 u 表示需要被合成的前景圖片,V 是 u 的梯度場。S 是背景圖片, 從泊松方程的解法,聊到泊松圖像融合 是合并后目標(biāo)圖像中被前景所覆蓋的區(qū)域,則從泊松方程的解法,聊到泊松圖像融合從泊松方程的解法,聊到泊松圖像融合的邊界。設(shè)合并后圖像在 從泊松方程的解法,聊到泊松圖像融合內(nèi)的像素表示函數(shù)是 f,在從泊松方程的解法,聊到泊松圖像融合 外的像素值表示函數(shù)是 從泊松方程的解法,聊到泊松圖像融合。

此時(shí),平滑可表示為: 從泊松方程的解法,聊到泊松圖像融合;保持邊界一致可表示為:從泊松方程的解法,聊到泊松圖像融合

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

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

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

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


注意:F 是 從泊松方程的解法,聊到泊松圖像融合f 的函數(shù),不是對 f 的,因此 從泊松方程的解法,聊到泊松圖像融合

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


怎么樣,看起來是不是一個(gè)泊松方程呢?當(dāng)然,還差兩步:

  • 因?yàn)樾枰交?,div v 取值需要同時(shí)參考前景圖片和背景圖片,可以直接等于前景像素的散度,也可以在前景和背景在同一點(diǎn)像素的散度進(jìn)行某種組合得到(論文中在 Selection cloning 和 Selection editing 章節(jié)有討論各自合適的場景,但個(gè)人以為這里采取學(xué)習(xí)的方法應(yīng)該更魯棒,而不是用固定的策略來區(qū)分)。anyway,div v 是可以計(jì)算的已知量;

  • 因?yàn)樾枰3诌吔缫恢?,邊界條件上像素值等于背景圖片即可。當(dāng)然也可以做一些策略,但同樣也可以計(jì)算得到的已知量。

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

代碼實(shí)現(xiàn)

函數(shù)代碼已經(jīng)收錄在了 OpenCV 的官方函數(shù) seamlessClone 里:github source code

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

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

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

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)

最終效果如下:

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

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知

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

分享:
相關(guān)文章

編輯

關(guān)注AI學(xué)術(shù),例如論文
當(dāng)月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個(gè)人簡介
為了您的賬戶安全,請驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說