计算机图形图像实验
一. 图像平滑
图像平滑,主要要用到openCV里的函数cvSmooth,如下
/*
src 原图像
dst 目标图像
smoothtype 平滑类型
CV_BLUR 均值滤波
CV_MEDIAN 中值滤波
CV_GAUSSIAN 高斯滤波
CV_BILATERAL 双向滤波
size1 平滑操作,窗口的宽,必须是奇数
size2 平滑操作,窗口的宽,为0的话和size1大小相等,
sigma1 用于高斯滤波
sigma2 用于双向滤波
*/
cvSmooth(cvArr *src,cvArr *dst, int smoothtype, int size1,int size2, double sigma1,double sigma2)
1. 均值滤波
IplImage* blurSmooth(IplImage* src, int size) {
IplImage* dst = cvCreateImage(cvSize(src->width, src->height), src->depth, src->nChannels);
cvSmooth(src, dst, CV_BLUR, size, 0, 0, 0);
return dst;
}
2. 中值滤波
/*
中值滤波
窗口的增加->图像的损坏加大
*/
IplImage* medianSmooth(IplImage* src, int size) {
IplImage* dst = cvCreateImage(cvSize(src->width, src->height), src->depth, src->nChannels);
cvSmooth(src, dst, CV_MEDIAN, size, 0, 0, 0);
return dst;
}
3. 高斯滤波
/*
高斯滤波
抑制服从正态分布的噪声有效
g(x)=exp( -x^2/(2*(sigma^2))
*/
IplImage* gaussianSmooth(IplImage* src,int size) {
IplImage* dst = cvCreateImage(cvSize(src->width, src->height), src->depth, src->nChannels);
cvSmooth(src, dst, CV_GAUSSIAN, size, 0, 0, 0);
return dst;
}
4. 实验结果
由以上结果可知,高斯滤波对于含有高斯噪声图像的处理结果较好,仔细看会发现要比均值滤波和中值滤波在细节上会更加清晰一点
椒盐噪声图像中,带有随机分布的白点(盐),灰点(椒),中值滤波区中间值,能够有效过滤这两种灰度值的极值,因此,中值滤波对椒盐噪声的处理结果较好
对于均匀噪声的添加是否正确,这个我不太清楚。按照自己的做法添加均匀噪声后,图像滤波如上所示,就清晰度来说还是高斯滤波的处理效果较好(仔细看可以发现的)
二. 图像锐化
1. Sobel算子
x方向梯度算子 Gx
⎡⎣⎢10−120−210−1⎤⎦⎥
y方向梯度算子 Gy
⎡⎣⎢121000−1−2−1⎤⎦⎥
⎡⎣⎢0−1−210−1210⎤⎦⎥⎡⎣⎢−2−10−1010