2016-11-09 86 views
0

我正在進行圖像識別(標記檢測),並正在研究圖像下采樣預識別以提高性能。推理是我會下載圖像,運行檢測算法,然後使用下采樣因子插入標記座標。我認爲下采樣成本是微不足道的,因爲它一直由我們的GPU完成。圖像下采樣性能

所以我嘗試使用opencv縮減採樣,看到不僅沒有得到任何改進,實際上花了更長的時間。然後我認爲這是因爲我讓CPU做它,所以我研究了使用opengl mipmap或甚至着色器進行縮減採樣,但從我讀過的內容來看,它仍然是一項昂貴的任務,花費數十甚至數百毫秒來減少常見圖像決議。

我的問題是,如果下采樣是連續進行的明顯緩解(想想調整任何圖像查看器上的圖像或視頻遊戲中的任何紋理)爲什麼它使用最常見的方法如此之慢?有一些祕密技術,或者我只是不理解某些東西?

+0

你的紋理有多大?你如何將它們上傳到GL API並讀回結果?這完全有可能是上傳和回讀成本是昂貴的部分,而不是縮減本身。 – solidpixel

+0

@solidpixel通常在做1280x720 - > 640x480。使用glTexImage2D從ram加載它,生成mipmap(glGenerateMipmap),然後使用glGetTexImage –

+1

@AlexButera獲得第二個mipmap,那麼爲什麼你需要'glGetTexImage'?這是你的方法很慢的確切原因。 AFAIR,您可以始終明確提供所需的mipmap級別,而不必前後移動像素數據並創建新的紋理對象。 – hidefromkgb

回答

0

您可以將圖像設置爲紋理,並在四邊形上使用此紋理。更改紋理座標,您可以對圖像進行任何轉換。這是非常快速的方法。這裏的瓶頸是將圖像從主機複製到設備並返回。

+1

儘管如此,沒有紋理過濾功能可以修復任何高於2:1下采樣的東西。單次傳輸中更高的下采樣率開始丟棄數據而不是過濾數據。 – solidpixel

+0

這是什麼意思?什麼是四方?你在談論opengl嗎? –

+0

是的,我的意思是OpenGL。將圖像作爲紋理上傳到GPU內存,將它綁定到四邊形並將其繪製到緩衝區,然後將結果複製回來。 –