國際網(wǎng)站賣東西怎么做新手怎么做電商
中值濾波算法是經(jīng)典圖像處理中極為常見的操作,一般我們通過調(diào)用OpenCV或者是Matlab直接進行使用,以至于有種它本來就很容易實現(xiàn)且速度很快的錯覺。近來用到中值濾波算法,因為不想用到OpenCV庫或者Matlab而對其實現(xiàn)研究了一番,才發(fā)現(xiàn)其中有很多值得注意的細(xì)節(jié)。下面我們結(jié)合著OpenCV的源碼實現(xiàn)來講。
OpenCV源碼分析和復(fù)現(xiàn)
直接復(fù)現(xiàn)
OpenCV關(guān)于中值濾波的源碼實現(xiàn)在“modules/imgproc/src/smooth.cpp”文件中(2.4.13.5版,最新版本做了調(diào)整,不知道跑哪里去了)。從源碼視濾波核的不同分別使用了不同的方法進行實現(xiàn)。對于核大小為3或5的情況,它使用"比較+交換"的方式對核中的元素進行排序從而獲得中間的元素。而對于大于5的情況,它使用的是直方圖的方式實現(xiàn)(這部分沒細(xì)看,說不定不是直方圖。。)。
下面以3*3大小的核來進行算法分析。假設(shè)核中元素如下:
p1 p2 p3
p4 p5 p6
p7 p8 p9
則該算法表示只要對這些元素做如下19次“比較+交換”即把小的數(shù)放在前面,大的數(shù)放在后面即可得到中間值。
op(p1, p2); op(p4, p5); op(p7, p8); op(p0, p1); op(p3, p4); op(p6, p7); op(p1, p2); op(p4, p5); op(p7, p8); op(p0, p3); op(p5, p8); op(p4, p7); op(p1, p4); op(p3, p6); op(p2, p5); op(p4, p7); op(p4, p2); op(p6, p4); op(p4, p2);
下面我們分別對原理進行解釋:
op(p1, p2)