圖像處理:均值濾波

濾波

濾波是將信號中特定波段頻率濾除的操作,是從含有干擾的接收信號中提取有用信號的一種技術。


均值濾波

均值濾波是典型的線性濾波算法,它是指在圖像上對目標像素給一個模板,該模板包括了其周圍的臨近像素(如3×3模板:以目標象素爲中心的周圍8個象素,構成一個濾波模板,即去掉目標象素本身),再用模板中的全體像素的平均值來代替原來像素值。


效果

平滑線性濾波處理降低了圖像的“尖銳”變化。由於典型的隨機噪聲由灰度級的急劇變化組成,因此常見的平滑處理的應用就是降低噪聲。均值濾波器的主要應用是去除圖像中的不相關細節,其中“不相關”是指與濾波器模板尺寸相比較小的像素區域。然而,由於圖像的邊緣也是由圖像灰度的尖銳變化帶來的特性,所以均值濾波處理還是存在着邊緣模糊的負面效應。


實驗

使用OpenCV進行實驗的部分代碼:

	IplImage *pImgTmp = cvCloneImage(m_pImg);

	// 第二種邊界處理:對邊界特殊處理
	for (i = 0; i < m_pImg->width; i++)
	{
		for (j = 0; j < m_pImg->height; j++)
		{
			CvScalar color;
			CvScalar colorTmp;
			int m, n, cnt = 0;
			color.val[0] = color.val[1] = color.val[2] = 0;		
			for (m = i - nKernelSize/2; m <= i+nKernelSize/2; m++)
			{
				for (n = j-nKernelSize/2; n <= j+nKernelSize/2; n++)
				{
					// 處理邊界和中心像素
					if ( (m == i && n == j) || m < 0 || m >= m_pImg->width 
						|| n < 0 || n >= m_pImg->height )
						continue;
					
					cvGetPixel(pImgTmp, n, m, colorTmp);
					color.val[0] += colorTmp.val[0];
					color.val[1] += colorTmp.val[1];
					color.val[2] += colorTmp.val[2];
					cnt++;
				}
			}
			// 取鄰域中像素的平均值
			color.val[0] /= cnt;
			color.val[1] /= cnt;
			color.val[2] /= cnt;
			cvSetPixel(m_pImg, j, i, color);
		}
	}
	cvReleaseImage(&pImgTmp);



其中cvGetPixel和cvSetPixel的定義爲:

void  cvGetPixel(const IplImage* pIplImg, int row, int col, CvScalar &color)
{
	if (col >= pIplImg->width || col < 0 ||
		row >= pIplImg->height || row < 0 )
		return;
	
	uchar *p = ((uchar*)(pIplImg->imageData + pIplImg->widthStep * row + col * 3));
	color = cvScalar(p[0], p[1], p[2]);
}

void  cvSetPixel(IplImage* pIplImg, int row, int col, CvScalar color)
{
	if (col >= pIplImg->width || col < 0 ||
		row >= pIplImg->height || row < 0 )
		return;
	
	uchar *p = ((uchar*)(pIplImg->imageData + pIplImg->widthStep * row + col * 3));
	p[2] = color.val[2];
	p[1] = color.val[1];
	p[0] = color.val[0];
}


測試圖原圖:



3×3模板結果:



5×5模板結果:



21×21模板結果:



參考

http://baike.baidu.com/view/1220844.htm

http://page.renren.com/601107605/note/803745240


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章