tri*_*can 2 optimization opencv image-processing
我正在实现一种算法(在OpenCV中),它迭代图像中的每个像素,并且对于每个像素计算块与邻域中的像素匹配,以便消除这些相邻像素的相似性.具有非常深的循环的"天真"实现非常慢,所以我想知道如何尝试提高性能.以下是我当前代码的摘录:
for(nCh=1;nCh<=channels;nCh++) { // Loop over three channels
for(i=0;i<h;i++) { // "vertical" loop
for(j=0;j<w;j++) { // "horizontal" loop
for (si=-sw_height; si<sw_height; si++){ // vertical search window loop
for (sj=-sw_width; sj<sw_width; sj++){ // horizontal search window loop
dist = 0;
for (blki=0; blki<blk_height; blki++){ // block match loop
for (blkj=0; blkj<blk_width; blkj++){ // block match loop
current_pxl = data[(i+blki)*step+(j+blkj)*channels+nCh];
search_pxl = data[(i+blki+si)*step+(j+blkj+sj)*channels+nCh];
dist += pow((current_pxl - search_pxl),2);
}
}
// ... further processing
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
你pow在最里面的循环中调用.别.
你也在那里做了很多指数计算.我打赌你可以从内循环中移出一些.
你应该能够得到它,所以你的内部循环看起来更像这样:
for (blkj = 0; blkj < blk_width; blkj++, pc += channels, ps += channels){
int diff = (*pc - *ps);
dist += (diff * diff);
}
Run Code Online (Sandbox Code Playgroud)
然后,你甚至可能想要展开它.
顺便说一句,更多的空白可能会有所帮助:-)
| 归档时间: |
|
| 查看次数: |
347 次 |
| 最近记录: |