<LearnOpenCV(11) C++>高斯差分图像(DoG)

高斯差分(DoG)

从图像高斯差分(DoG)金字塔了解上下采样API及高斯模糊。

上采样与降采样

API

CV_EXPORTS_W void pyrDown( InputArray src, OutputArray dst,
                           const Size& dstsize = Size(), int borderType = BORDER_DEFAULT );
CV_EXPORTS_W void pyrUp( InputArray src, OutputArray dst,
                         const Size& dstsize = Size(), int borderType = BORDER_DEFAULT );
  • src 输入图像
  • dst 输出图像
  • dstsize 输出图像尺寸

代码

在这里插入图片描述

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main() {
	Mat src, dst;
	src = imread("girl6.jpg");
	if (!src.data)
	{
		printf("Wrong with Loading img!\n");
		return -1;
	}
	
	Mat dst_pyrup, dst_pyrdown;
	pyrDown(src, dst_pyrdown, Size(src.cols / 2, src.rows / 2));
	pyrUp(src, dst_pyrup, Size(src.cols * 2, src.rows * 2));
	imshow("dst_pyrdown", dst_pyrdown);
	imshow("src", src);
	imshow("dst_pyrup", dst_pyrup);
    waitKey(0);
	return -1;

}

高斯差分

由于高斯滤波核按统计分布分配像素值,图像中低频部分在不同强度(σ)的滤波下变化不大,高频部分在不同的强度的滤波下表现出差异,所以可以根据

不同强度下的滤波结果得到图像的高频信息。

高斯模糊

简单说高斯模糊就是根据邻域像素到目标像素的距离按照正态分布(可以调整方差)的权重求加权平均值作为目标像素值。

CV_EXPORTS_W void GaussianBlur( InputArray src, OutputArray dst, Size ksize,
                                double sigmaX, double sigmaY = 0,
                                int borderType = BORDER_DEFAULT );
  • src 出入图像
  • dst 输出图像
  • ksize 滤波核尺寸
  • sigmax x方向标准差
  • sigmay y方向标准差
cvtColor(src, g_src, COLOR_BGR2GRAY);	
GaussianBlur(g_src, Gr_g1, Size(5, 5), 0, 0);
GaussianBlur(Gr_g1, Gr_g2, Size(5, 5), 0, 0);

在这里插入图片描述

高斯差分

不同强度下的高斯模糊结果之间的差可以描述图像中的高频信息,成DoG图像:

在这里插入图片描述

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main() {
	Mat src, dst;
	src = imread("girl6.jpg");
	if (!src.data)
	{
		printf("Wrong with Loading img!\n");
		return -1;
	}
	
	Mat dst_pyrup, dst_pyrdown;
	pyrDown(src, dst_pyrdown, Size(src.cols / 2, src.rows / 2));
	pyrUp(src, dst_pyrup, Size(src.cols * 2, src.rows * 2));

	Mat g_src, g_pyrup, g_pyrdown;
	cvtColor(src, g_src, COLOR_BGR2GRAY);
	cvtColor(dst_pyrup, g_pyrup, COLOR_BGR2GRAY);
	cvtColor(dst_pyrdown, g_pyrdown, COLOR_BGR2GRAY);

	Mat Gr_g1, Gr_g2, Gr_g_up, Gr_g_down;
	GaussianBlur(g_src, Gr_g1, Size(5, 5), 0, 0);
	GaussianBlur(Gr_g1, Gr_g2, Size(5, 5), 0, 0);//没有改变强度,只是单纯的两次滤波
	subtract(Gr_g1, Gr_g2, dst,Mat());//两次图像求差
	normalize(dst, dst, 255, 0, NORM_MINMAX);//归一化显示,DoG图像不太明显,做一个归一化显示

	imshow("Gr_g1", Gr_g1);
	imshow("g_src", g_src);
	imshow("Gr_g2", Gr_g2);
	imshow("DoG Image", dst);

	GaussianBlur(g_pyrup, Gr_g_up, Size(3, 3), 0, 0);
	GaussianBlur(g_pyrdown, Gr_g_down, Size(3, 3), 0, 0);
	
	//imshow("dst_pyrdown", g_pyrup);
	//imshow("dst_pyrup", g_pyrdown);

	waitKey(0);
	return -1;

}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wdmcs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值