2011-05-24 65 views
2

我想實現Avidan/Shamir的接縫雕刻算法。在能夠使用核心圖像濾波器實現的能量計算階段之後,我需要計算能量最低的接縫,它不能作爲核心圖像濾波器實現,因爲它使用動態編程(並且您無法訪問以前的opengl着色語言中的計算)。接縫雕刻 - 訪問可可中的像素數據

所以我需要一種方法來在objective-c可可中有效地訪問圖像的像素數據。

僞代碼省略邊界檢查:

for y in 0..lines(image) do: 
    for x in 0..columns(image) do: 
    output[x][y] = value(image, x, y) + 
        min{ output[x-1][y-1]; output[x][y-1]; output[x+1][y-1] } 
+0

你是怎麼計算能量數據的?你的算法是什麼? – 2013-10-02 05:55:41

回答

3

以訪問的圖像的像素值,最好的辦法是創建一個CGBitmapContextRef與CGBitmapContextCreate。關於這一點的重要部分是,當您創建上下文時,您將傳入指針,該指針將用作位圖數據的後備存儲。這意味着數據將保存像素值,你可以做任何你想要的東西。

所以步驟應該是:

  1. 分配緩衝區使用malloc或另一種合適的分配器。
  2. 將該緩衝區作爲第一個參數傳遞給CGBitmapContextCreate。
  3. 將圖像繪製到返回的CGBitmapContextRef中。
  4. 釋放上下文。
  5. 現在你有你的原始數據指針,用CGBitmapContextCreate調用中指定的格式填充像素。
+0

這不會利用GPU,但對嗎?如果我正確理解算法,那麼必須完成圖像中的行數(如此容易1024+次)。 – 2013-10-02 06:05:34

+0

對,最初的問題是關於訪問圖像數據以運行c代碼,所以答案顯示瞭如何將圖像數據轉換爲堆中明確定義的格式。 – 2013-10-02 13:23:18