我有一個二進制圖像,所述二進制值是0或255中的圖像數據的類型是無符號字符。在這裏,我需要對此圖像進行中值濾波。消除分支當在二進制數{0,255}尋找中值圖像
我想用直方圖發現平均要快。使用一些代碼來解釋:
unsigned int hist[2] = {0, 0};
for (int i = 0; i < kernel_h; ++i) {
for (int j = 0; j < kernel_w; ++j) {
if (image(i,j) == 0) {
hist[0]++;
}
else {
hist[1]++;
}
}
}
然後,我們可以得到非常快的中值。但由於這種情況下,代碼仍然可以改進:
int counter = 0;
for (int i = 0; i < kernel_h; ++i) {
for (int j = 0; j < kernel_w; ++j) {
if (image(i,j) == 0) {
counter++
}
else {
counter--;
}
}
}
但我不知道有沒有消除的if-else分支,如使用位操作來映射{0,255}的東西那麼一些其他的方式我們可以更新一個沒有分支的標誌。
任何人的任何建議?
是矢量一個選擇?你在哪個平臺上?使用SSE,NEON或DSP擴展,二進制映像上的3x3和5x5中值濾波器可以在x86和ARM處理器上簡單地進行矢量化。在字節大小的數據上,您應該能夠使用SSE一次處理16個像素。 –