2009-03-04 50 views
9

我目前正在開發一款使用opencv和qt繪製數據點的軟件。我需要能夠填寫來自不完整數據的圖像。我想插入我有的點之間。任何人都可以推薦一個圖書館或功能,可以幫助我。我想也許opencv reMap方法,但我似乎無法得到這個工作。如何插入數據點之間?

該數據是強度值的2-d矩陣。我想創建某種形象。它是一個學校項目。

+0

需要的附加信息:它是什麼類型的數據?你能告訴一些關於曲線的性質(即它們的外觀?) – Rook 2009-03-04 05:15:21

+0

該數據是強度值的2-d矩陣。我想創建某種形象。它是一個學校項目。 – Sam 2009-03-04 21:18:25

回答

7

唷!大科目。

「正確」的答案取決於很多在您的問題域和您正在做的各種細節。

在1維以上的插值需要做出一些選擇。我假定你正在繪製一個規則的網格,但是你的一些網格點沒有數據。大問題:缺少的點是稀疏的,還是會產生大斑點?

不能添加信息,所以你只是想建立一些東西,將好的。

概念上簡單的建議(但實現可能有一些工作):

有關丟失的數據每個區域,確定所有的邊緣點。這是找到X的這個數字

oooxxooo 
oox..xoo 
oox...xo 
ox..xxoo 
oox.xooo 
oooxoooo 

在哪裏了。的是點丟失的數據,以及X和O的具有數據(單個缺失點,這將是四個最近的鄰居)。用這個blob周圍的邊緣點的平均值填充每個缺失的數據點。爲了使其成爲平滑,權重的每個點由1/d其中d是兩個點之間的出租車司機的距離(△X +增量Y)..


從之前我們有任何細節:

在沒有那種信息,你是否嘗試過直線插值?如果您的數據相當密集,這可能會爲您做到,並且足夠簡單,您可以在需要時進行聯機編碼。

下一步通常是一個三次樣條,但爲此您可能想要獲取現有的實現。


當我需要的不僅僅是一個快速的線性插值更強大的東西,我通常使用ROOT(並挑選TSpline類之一),但是這可能比你需要更多的開銷。

正如評論中指出的那樣,ROOT是big,儘管速度很快,但確實會試圖強制您按照ROOT方式執行操作,因此它可能對您的程序產生很大影響。


(或確實是從外推)的兩個點(X1,Y1)和(x2,y2)之間畫線性插值給你

y_i = (x_i-x1)*(y2-y1)/(x2-x1) 
0

如果我明白你的需要如下。

我覺得你有X,Y,強度對於L通過W的尺寸的一個子集,要填充所有X從0到L和Y範圍從0到W.

如果這是你的問題,那麼解決方案是通過使用過濾器來獲得其他強度。

我認爲拜耳濾波器或高斯濾波器可以爲您完成這項工作。

你可以谷歌這些過濾器,你會得到答案的實現。

祝你好運。

12

插值是一個複雜的主題。插入一組點的方法有無限多種,假設你確實希望做內插,而不是平滑任何類型。 (一個插值精確地再現原始數據點。)當然,這個問題的二維性質使事情變得更加困難。

在2-d中有幾種常見的分散數據插值方案。實際上,對於那些有權訪問它的人來說,可以得到一篇非常好的論文(Richard Franke,「Scattered data interpolation:Tests of some methods」,Mathematics of Computation,1982)。

也許最常用的方法是基於對您的數據進行三角測量。僅從數據點構建域的三角剖分。然後,數據凸包中的任意點必須位於三角形中的一箇中,否則它將位於共享邊上。這使您可以在三角形內部線性插入。如果您使用的是MATLAB,那麼函數griddata可用於此特殊目的。)

嘗試從分散點填充完整矩形圖像時的問題很可能是數據不能擴展到陣列。在這種情況下,基於三角剖分的方案將失敗,因爲陣列的角落不位於散射點的凸包內。另一種選擇是使用「徑向基函數」(通常縮寫爲RBF)。有很多這樣的方案可以找到,包括克里格在地質統計學界使用。

http://en.wikipedia.org/wiki/Kriging

最後,修補是對於其中的元件在陣列中給定的內插的方案的名稱,但是其中也有缺失的元素。這個名字顯然是指由藝術品管理員完成的,他需要修復一件有價值的藝術品中的淚珠或裂口。

http://en.wikipedia.org/wiki/Inpainting

背後修補的想法通常是制定一個邊界值問題。也就是說,在有孔的區域定義一個偏微分方程。使用已知的邊界值,通過求解未知元素的PDE來填充孔。如果有大量的未知元素,這可能是計算密集型的,因爲它通常需要求解至少一個大規模稀疏線性方程組。如果PDE是非線性的,那麼它就成爲一個更加密集的問題。對於PDE來說,一個簡單的,合理的好選擇是拉普拉斯算子,這導致線性系統很好地推斷。再次,我可以爲MATLAB用戶提供解決方案。

http://www.mathworks.com/matlabcentral/fileexchange/4551

爲PDE更好的選擇可能來自非線性偏微分方程。一旦這是Navier/Stokes方程。它非常適合對通常看到的表面類型進行建模,但處理起來也更加困難。就像在生活的許多方面一樣,你會得到你所付出的。

1

考慮到這是一個簡單的學校項目,可能是最簡單的插值技術來實現的是「近鄰」

對於每個丟失的數據點,你找到最近的「裝」的數據點,並用其作爲價值。

如果您想改善一點點的翻轉,那麼您可以說,找到K個最近的數據點,並使用它們的加權平均值作爲缺失數據點的值。

重量可能與點距缺失數據點的距離成正比。

還有其他的技術,但最近的鄰居可能是最容易實現的。

相關問題