基於均值座標(Mean-Value Coordinates)的影象融合演算法的優化實現
阿新 • • 發佈:2020-03-20
[toc]
# 1. 概述
我在之前的文章[《基於均值座標(Mean-Value Coordinates)的影象融合演算法的具體實現》][netlink1]中,根據[《Coordinates for Instant Image Cloning》](https://www.cse.huji.ac.il/~danix/mvclone/)這篇論文,詳細論述了影象融合中泊松融合演算法的優化演算法——均值座標(Mean-Value Coordinates)融合演算法的具體實現。其實在這篇論文中,還提出了兩種優化實現,能夠進一步提升效率,這裡就論述一下其優化演算法的具體實現。
# 2. 實現
## 2.1. 原理
均值座標融合演算法的核心思想是算出ROI中每個點的MVC(Mean-Value Coordinates),如果ROI中存在n個點,ROI邊界畫素為m個點,那麼該演算法的時間複雜度至少為O(nm)。根據[《Coordinates for Instant Image Cloning》](https://www.cse.huji.ac.il/~danix/mvclone/)的描述,MVC融合演算法修正值其實是一個線性區間,只要得到其中一些關鍵點的融合修正值,其他點的融合修正值就可以根據周圍的融合修正值線性插值出來。
因此,可以通過CGAL來對ROI多邊形邊界構建一個自適應三角網,以邊界上每個柵格點作為約束構網,為了滿足Delaunay特性,就會在ROI內部新新增一些點,這樣就會出現邊界小而密集,邊界大而稀疏的自適應三角網(可參看這篇文章[《通過CGAL將一個多邊形剖分成Delaunay三角網》][netlink2]):![imglink1]
這樣,n個點就會將為常數級別個數c,也就是時間複雜度至少為O(cm)。當然從三角面上插值也會有時間消耗,但時間複雜度會明顯小於計算均值座標。
## 2.2. 核心程式碼
具體核心程式碼實現如下(完整的程式碼實現地址見文章末尾):
```cpp
//三角網優化
void QImageShowWidget::MVCBlendOptimize(int posX, int posY)
{
QTime startTime = QTime::currentTime();
//Step1:找到邊界上所有的畫素點