2012-04-22 68 views
0

numpy或scipy是否包含一個與n維「梯度」fn相反的函數?n維numpy.gradient的逆

E.g.如果「圖像」包含二維矩陣,然後我想一個函數inv_gradient該行爲如下:

(gx, gy) = numpy.gradient(image) 
constant_vector_0 = image[0,:] - inv_gradient(gx, gy)[0,:] 
constant_vector_1 = image[:,0] - inv_gradient(gx, gy)[:,0] 
image == inv_gradient(gx, gy) + tile(constant_vector_0,(shape(image)[0],1)) + transpose(tile(constant_vector_1,(shape(image)[1],1))) 
+1

原始圖像不是不唯一嗎?例如,拍攝任何能夠提供這些漸變的圖像並向其中添加常量。在矢量微積分中,無論如何,只能對保守的矢量場真正做到這一點,並且通常在積分中有未確定的函數。真正的圖像絕對不是產生保守梯度的標量場(僅考慮邊緣不連續性),可能不支持這種反演過程。 – ely 2012-04-22 21:27:59

+0

我不明白爲什麼一個真實的圖像不是標量場 - 你不能把標量場作爲由無限網格零點包圍的圖像嗎?這個漸變應該有零捲曲。我將編輯該問題以允許沿每個軸添加一個常量向量。 – bshanks 2012-04-22 21:38:13

+0

我知道的一種方法是如果你認爲它是諧波,重構圖像的研究。基本上,您可以根據梯度計算拉普拉斯算子,並且在假設拉普拉斯算子爲零的情況下可以解出原始圖像的未知數。這絕不是一個簡單的優化問題,並且結果通常不好,因爲幾乎沒有真實世界的圖像甚至大致諧波。可能還有其他的識別假設,例如最小化的總變差等,但SciPy爲這些複雜的重構內置了一個非常值得懷疑的假設。 – ely 2012-04-22 21:40:23

回答

2

你所描述基本上是一個逆濾波器。這些存在,但是有限。

理解這一點的一種方法是通過convolution theorem,並將梯度想象爲卷積的特定內核,在這種情況下,像1D中的(-1,0,1)。然後問題是內核的傅里葉變換(FT)將爲零,並且當內核和信號的FT相乘時,內核的FT中的零將擦除這部分中的原始數據中的任何數據光譜(當噪聲添加到圖像時,這會產生更多問題)。特別是對於梯度,f = 0波段有0次冪,這就是人們在評論中提到的,但其他信息也會丟失。

儘管如此,你仍然可以從逆濾波器中得到很多東西,也許你需要什麼。這是相當具體的案件。

Here's一個非常基本和快速的問題描述,和一個example(雖然不適用於漸變)。