OpenCV 的內建 filter2D 函式, 實作了影像處理上常用的 Mask, 或是稱為 Filter, Convolution, 的操作. 通常這也是影像相關的演算法的骨幹, 也是最耗費時間的環節.
Mask 的運算時間, 和 Mask 的組成有絕對的關係, 以下套用不同的 Mask, 來觀察他運算時間上的差異.
比較 filter2D()以及自行撰寫的 C 函式
Index | Implement | ms |
C Function | *output++ = saturate_cast<uchar>(5*current[i] -current[i-nChannels] - current[i+nChannels] - previous[i] - next[i]); | 64.909 |
filter2D | Mat kernel = (Mat_<char>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); filter2D( src, dst1, src.depth(), kernel ); | 3.030 |
不同 Mask 的時間比較
Index | Implement | ms |
1x1 | Mat kernel_1x1 = (Mat_<char>(1,1) << 1); | 1.134 |
3x3 | Mat kernel_3x3 = (Mat_<char>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); | 2.718 |
5x5 | Mat kernel_5x5 = (Mat_<char>(5,5) << 0,0,-1,0,0,0,0,-1,0,0,-1,-1,9,-1,-1,0,0,-1,0,0,0,0,-1,0,0); | 4.313 |
7x7-1 | Mat kernel_7x7 = (Mat_<char>(7,7) << 0,0,0,-1,0,0,0, 0,0,0,-1,0,0,0, 0,0,0,-1,0,0,0, -1,-1,-1,13,-1,-1,-1, 0,0,0,-1,0,0,0, 0,0,0,-1,0,0,0, 0,0,0,-1,0,0,0); | 6.170 |
7x7-2 | Mat kernel_7x7_2 = (Mat_<char>(7,7) << -4,-3,-2,-1,-2,-3,-4, -3,-3,-2,-1,-2,-3,-3, -2,-2,-2,-1,-2,-2,-2, -1,-1,-1,107,-1,-1,-1, -2,-2,-2,-1,-2,-2,-2, -3,-3,-2,-1,-2,-3,-3, -4,-3,-2,-1,-2,-3,-4); | 22.44 |
沒有留言:
張貼留言
請提供您寶貴的意見