您的位置:首页 > 其它

锐化空间滤波器

2016-03-26 16:18 260 查看
锐化处理主要目的是突出灰度过度部分。





二阶微分-拉普拉斯算子锐化

两变量的离散拉普拉斯算子是:



void laplaceSharpenl(){
auto im = imread("/Users/qixiangzhang/Desktop/openCV/jy.png");
Mat dst;
Mat kernel = (Mat_<float>(3,3) << 0,-1,0,-1,5,-1,0,-1,0);
filter2D(im, dst, im.depth(), kernel);
imshow("Original", im);
imshow("Sharpenl", dst);
}


结果:



标定的拉普拉斯滤波图像:

拉普拉斯滤波处理后图像中既有正值又有负值,所有负值被修剪为0,很多经过拉普拉斯滤波后的图像大部分是黑色的。典型的标定拉普拉斯图像的方法是对他的最小值加一个新的代替0的最小值。

非锐化掩蔽和高提升滤波

非锐化掩蔽的处理步骤:

1)模糊原图像。

2)从原图中减去模糊的图像得到模板。

3)将模板加到原图像上。

公式描述:





代码:

void Unsharp(){
auto im = imread("/Users/qixiangzhang/Desktop/openCV/yq.png");
Mat dstIm_9;
blur(im, dstIm_9, Size(9,9));//模糊
imshow("Original",im);
imshow("blur9", dstIm_9);
Mat sub;
absdiff(im,dstIm_9,sub);//相减
Mat add;
scaleAdd(im, 1, sub, add);//相加,非锐化掩蔽
imshow("k=1",add);
scaleAdd(im, 2, sub, add);//k=2,高提升滤波
imshow("k=2",add);
}




梯度图像

梯度图像可理解为突出图像显著变化的地方,变化越大其梯度值越高。

图像函数f(x,y)在点(x,y)的梯度是一个具有大小和方向的矢量,设为Gx 和 Gy 分别表示x方向和y方向的梯度,这个梯度的矢量可以表示为:



这个矢量的幅度为:



近似为:



罗伯特交叉梯度算子

算子:



由两个2*2模板组成,用卷积模板表示为:



结合

可得结果:



Soble算子

算子:



用上述方法可得:



其中z表示矩阵中该位置的值。

opencv接口:

CV_EXPORTS_W void Sobel( InputArray src, OutputArray dst, int ddepth,
int dx, int dy, int ksize=3,
double scale=1, double delta=0,
int borderType=BORDER_DEFAULT );


代码

void sobleIM(){
auto src = imread("/Users/qixiangzhang/Desktop/openCV/yq.png");
imshow("1",src);
//用高斯滤波进行模糊
GaussianBlur( src, src, Size(3,3), 0, 0, BORDER_DEFAULT );

Mat grad_x,grad_y;
Mat abs_grad_x,abs_grad_y;
//计算x梯度
Sobel(src, grad_x, CV_8U, 1, 0);
convertScaleAbs( grad_x, abs_grad_x );
//计算y梯度
Sobel(src, grad_y, CV_8U, 1, 0);
convertScaleAbs( grad_y, abs_grad_y );
//相加并加权。
addWeighted( abs_grad_x, 1, abs_grad_y, 1, 0, src );
imshow("soble1",src);

addWeighted( abs_grad_x, 2, abs_grad_y, 2, 0, src );
imshow("soble2",src);
}


结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: