2016-07-28 81 views
0

我想要做的iOS中一個閃耀的效果,看起來像這樣快速徑向模糊的IOS

enter image description here

我發現了一個徑向模糊算法的OpenCV(https://stackoverflow.com/a/13699826/6545468) ,結果不是很滿意

enter image description here

光束是「離散的」,最後的結果取決於remap(變焦)迭代,即耗時。 我還發現了一些OpenGL着色器,只是類似的實現。

那麼,有沒有什麼辦法可以在iOS應用中實現After Effects CC Radial Fast Blur(平滑和快速)?

回答

0

看着頂部的圖像我會說你沒有辦法在一般的圖像上做這麼快,絕不是。雖然這真的取決於圖像大小和「快速」的定義,因此可以說在1秒的大小的圖像上繪製此圖像將是一項挑戰。

對於一般的圖片,你將有2個操作步驟:

首先是重繪褪色圖像N次以帆布其中N是一個數字,影響最大偏移具有像素。在頂部圖像,這意味着瘋狂200重繪。如果你有一些openGL系統,你可以嘗試和測試繪製這麼多樣本需要多長時間(沒有任何影響,只需重繪到紋理),如果你接近理想的結果,你可以嘗試實現實際的邏輯。

第二步是獲取每個片段(像素)的周圍相關樣本,這是高斯模糊最常用的過程。此過程通常使用7x7至11x11範圍內的像素矩陣,並且仍然是緩慢且繁重的操作,對於大圖像效果不是很模糊。在你的情況下,我們正在查看大約200x200的樣本,這是一個總NO-NO,我甚至不打算嘗試它。

如果您嘗試組合2個過程,可能會變得有趣。您可以嘗試使用第二個程序首先模糊輸入圖像,這將有效地將對象放大幾個像素。然後,您可以(僅用於照亮)使用第一個步驟以減少樣本數量重新繪製模糊圖像。例如,如果模糊的大小約爲5個像素,那麼您可能可以減少2-3次的重繪次數,這可能是相當的性能增益。這個過程不會讓你的效果如同你在圖像上一樣清晰,但你在這裏很幸運:你發佈的第二張圖片已經完成了你所需要的測試。只需創建一個您已經使用的圖像的模糊版本,並測試需要多少個樣本才能獲得好的結果。

仍然有很多可能的優化可能影響質量或不影響質量。如果你正在進行高斯模糊處理,通常可以安全地對圖像進行一下采樣。每個維度的縮放比例可以將碎片數量減少4,這當然是值得嘗試的事情。我會嘗試以下方法:

  • 畫出圖像下采樣緩衝器直接應用使用上的紋理
  • 線性模式重繪一些N個樣本上的下采樣緩衝器的光澤效果的高斯模糊
  • 重繪結果上採樣緩衝區(原始大小)應用一些高斯模糊再次
  • 繪製原始圖像在產生陰影

如果你會做任何這些讓河畔e保持表現的軌跡。完成後,如果你分享了結果(即使你失敗了),這將是很好的。