資源簡(jiǎn)介
使用C語(yǔ)言實(shí)現(xiàn)的中值濾波程序,可直接嵌入,模塊化設(shè)計(jì)-可復(fù)用性高!
代碼片段和文件信息
/*************************************************************************
?*?函數(shù)名稱:
?*???MedianFilter()
?*?參數(shù):
?*???int???iFilterH -?濾波器的高度
?*???int???iFilterW -?濾波器的寬度
?*???int???iFilterMX -?濾波器的中心元素X坐標(biāo)
?*???int???iFilterMY -?濾波器的中心元素Y坐標(biāo)
?*?說(shuō)明:
?*???該函數(shù)對(duì)DIB圖像進(jìn)行中值濾波。
?************************************************************************/
#define?iFilterW?1
#define?iFilterH?1
#define?iFilterMX?1
#define?iFilterMY?1
#define?WIDTHBYTES(bits)????(((bits)?+?31)?/?32?*?4)
unsigned?char?GetMedianNum(int?*?bArray?int?iFilterLen);
void?MedianFilter(unsigned?char?*pImg1unsigned?char?*pImgint?nWidthint?nHeight)
{
????unsigned?char???*lpSrc; ????????????????//?指向源圖像的指針
unsigned?char???*lpDst; ????????????????? //?指向要復(fù)制區(qū)域的指針
int?????????aValue[iFilterH*iFilterW]; ????//?指向?yàn)V波器數(shù)組的指針
int ijkl; ????????????????????//?循環(huán)變量
int lLineBytes; ????????????????????//?圖像每行的字節(jié)數(shù)
lLineBytes?=?WIDTHBYTES(nWidth?*?8);
for?(?i=0;i (*pImg)=0;
//?開(kāi)始中值濾波
//?行(除去邊緣幾行)
for(i?=?iFilterMY;?i? {
//?列(除去邊緣幾列)
for(j?=?iFilterMX;?j? {
//?指向新DIB第i行,第j個(gè)象素的指針
lpDst?=?pImg?+?lLineBytes?*?(nHeight?-?1?-?i)?+?j;
//?讀取濾波器數(shù)組
for?(k?=?0;?k? {
for?(l?=?0;?l? {
//?指向DIB第i?-?iFilterMY?+?k行,第j?-?iFilterMX?+?l個(gè)象素的指針
lpSrc?=?pImg1?+?lLineBytes?*?(nHeight?-?1?
-?i?+?iFilterMY?-?k)?+?j?-?iFilterMX?+?l;
//?保存象素值
aValue[k?*?iFilterW?+?l]?=?*lpSrc;
}
}
//?獲取中值
*?lpDst?=?GetMedianNum(aValue?iFilterH?*?iFilterW);
}
}
}
unsigned?char?GetMedianNum(int?*?bArray?int?iFilterLen)
{
int ij; //?循環(huán)變量
unsigned?char?bTemp;
//?用冒泡法對(duì)數(shù)組進(jìn)行排序
for?(j?=?0;?j? {
for?(i?=?0;?i? {
if?(bArray[i]?>?bArray[i?+?1])
{
//?互換
bTemp?=?bArray[i];
bArray[i]?=?bArray[i?+?1];
bArray[i?+?1]?=?bTemp;
}
}
}
//?計(jì)算中值
if?((iFilterLen?&?1)?>?0)
{
//?數(shù)組有奇數(shù)個(gè)元素,返回中間一個(gè)元素
bTemp?=?bArray[(iFilterLen?+?1)?/?2];
}
else
{
//?數(shù)組有偶數(shù)個(gè)元素,返回中間兩個(gè)元素平均值
bTemp?=?(bArray[iFilterLen?/?2]?+?bArray[iFilterLen?/?2?+?1])?/?2;
}
return?bTemp;
}
評(píng)論
共有 條評(píng)論