**主要包括兩部分:主機端(cpu)的呼叫函式和裝置端(gpu)的濾波執行函式。
主機端呼叫函式:分配執行緒、分配記憶體還可以對裝置端執行進行計時;
裝置端濾波執行函式:是影象進行濾波的執行函式,是整個cuda程式的核心,也叫kernel。
主機端呼叫函式:
//主機端呼叫函式
extern
"c"void runtestgpu(unsigned
char *dst, unsigned
char *src, int imagew, int imageh, float *timegpu)
裝置端執行函式:
/**************************【均值濾波,在gpu中執行】**************************
m_pimgdataout:濾波後的影象
m_pimgdata:輸入原始影象
m_imgwidth:影象寬
m_imgheight:影象高
*/__global__ void meansmooth(unsigned char *m_pimgdataout, unsigned char *m_pimgdata, int m_imgwidth, int m_imgheight)
}
中值濾波的函式和均值濾波相似,cpu端呼叫函式與均值濾波一樣,只是裝置端的濾波執行函式不同,多了乙個鄰域排序函式來獲得鄰域的均值。
鄰域排序函式:
//排序函式
__device__ inline void sort(unsigned char *value)
}}
}
裝置端執行函式:
/**************************【中值濾波,在gpu中執行】**************************
m_pimgdataout:濾波後的影象
m_pimgdata:輸入原始影象
m_imgwidth:影象寬
m_imgheight:影象高
*/__global__ void midsmooth(unsigned char *m_pimgdataout, unsigned char *m_pimgdata, int m_imgwidth, int m_imgheight)
}//排序
sort(value);
//更新輸出資料
*(m_pimgdataout + idy*linebyteout + idx) = value[4];
}}
中值濾波VS 均值濾波
如果不是演算法中用到了median filter,恐怕我還不沒有意識到這兩個有聯絡又有區別的概念。中值濾波是median filter,均值濾波是mean filter,二者的用途也很接近,就是把訊號抹平,消除雜訊。不過區別還是有的,後面再說。如果把他們兩個放在一起,看到名字就大概能猜出二者的不同,...
中值濾波與均值濾波
中值濾波法 是一種非線性平滑技術,它將每一畫素點的灰度值設定為該點某鄰域視窗內的所有畫素點灰度值的中值.中值濾波是基於排序統計理論的一種能有效抑制雜訊的非線性訊號處理技術,中值濾波的基本原理是把數字影象或數字序列中一點的值用該點的乙個鄰域中各點值的中值代替,讓周圍的畫素值接近的真實值,從而消除孤立的...
均值空間濾波和中值空間濾波
空間濾波由乙個鄰域 通常是乙個較小的矩形 然後對該鄰域所包圍的影象畫素執行預定義操作產生乙個新的畫素,新畫素的座標等於鄰域的中心座標。均值濾波器就是對這個區域的畫素取平均值給鄰域中心的那個畫素,它是線性濾波器。這種處理可以較低影象的 尖銳 變化。常見的應用就是較低雜訊,但是一般圖象邊緣也是由影象灰度...