您的位置:首页 > 其它

图像低频高频区域分离

2016-02-24 20:24 381 查看


简介

  本篇整理记录利用小波分离图像的高频、低频部分信息。


具体实现

  实现代码参考资料:小波变换 C++ opencv 实现


小波变换

  小波生成和参考资料中一致。小波变换中,首先抽取出原图像的每一行,进行小波分解,获得水平方向的高、低频信息。
接着抽取出原图像的每一列,进行小波分解,获得垂直方向的高、低频信息。
  生成的对应结果如下:






水平方向                                         垂直方向


区域分离

  如上,我们已经获得了水平、垂直方向的高、低频信息,并保存到了图像中。接着我们首先将这两幅图片都叠加到同一副图像中。
结果开运算、高斯滤波和阀值二值化之后,最终获得比较好的分离掩码结果。
  对应代码如下:

void picDone(Mat mat1, Mat mat2){
int i, j;
IplImage tmp;
CvScalar s;
float sum = 0;

mat2.copyTo(mask);
tmp = mask;
for(i=0; i< mat2.rows; i++){
for(j=0; j< mat2.cols; j++){
mask.at<float>(i,j) = (mat1.at<float>(i,j) + mat2.at<float>(i,j)) / 2;
if((i==0) && (j==0)){
sum = mask.at<float>(i,j);
}else{
sum = (sum + mask.at<float>(i,j)) / 2;
}
}
}
tmp = mat2;
cvZero(&tmp);

imshow("mask0", mask);
morphologyEx(mask, mat2, MORPH_CLOSE, Mat(5,5,CV_8U), Point(-1,-1), 1);
GaussianBlur(mat2, mask, Size(7,7), 0, 0);

tmp = mask;
for(i=0; i< mask.rows; i++){
for(j=0; j< mask.cols; j++){
s = cvGet2D(&tmp, i, j);
if(s.val[0] < sum){
s.val[0] = 0;
cvSet2D(&tmp, i, j, s);
}
}
}
imshow("mask", mask);
}

  对应的结果显示如下:





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