[学习笔记-图像处理篇]基于小波+IHS图像融合的c++程序梳理

带佬资源链接基于IHS变换和小波变换的可见光和红外图像融合(opencv/C++实现)

1)运行环境:WIN10 + VS2017社区 + opencv3.2.0
2)基于C++实现

大佬的程序给的很清楚,剩下的边角料工作来整理一下。
主要就是头文件、声明以及一些自己运行时报错的调试。

  1. 头文件及声明
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

//这里用了math.h但是没什么用,所以对pi直接定义
#define PI       3.14159265358979323846   // pi
 
using namespace cv;
using namespace std;

除头文件和声明外,还会报一个 PI 未定义的错,即使用了 math.h 也没用(对我来说),索性直接定义一下派

  1. 报错调试
    将下面2个函数中的部分内容进行修改,直接贴修改后的程序了。
Mat WaveTransform::waveletDecompose(const Mat &_src, const Mat &_lowFilter, const Mat &_highFilter)
Mat WaveTransform::waveletReconstruct(const Mat &_src, const Mat &_lowFilter, const Mat &_highFilter)

主要是报 无法从“cv::Mat_<float>”转换为“cv::Mat &” 的错误,通了一下程序,发现是子函数中将 Mat 直接赋给 Mat & (可能表述不是很正确),反正修改一下就好了。

Mat WaveTransform::waveletDecompose(const Mat &_src, const Mat &_lowFilter, const Mat &_highFilter)
{
	assert(_src.rows == 1 && _lowFilter.rows == 1 && _highFilter.rows == 1);
	assert(_src.cols >= _lowFilter.cols && _src.cols >= _highFilter.cols);
	//Mat &src = Mat_<float> (_src);
	Mat src = Mat_<float>(_src);

	int D = src.cols;

	//Mat &lowFilter = Mat_<float>(_lowFilter);
	//Mat &highFilter = Mat_<float>(_highFilter);
	Mat lowFilter = Mat_<float>(_lowFilter);
	Mat highFilter = Mat_<float>(_highFilter);

	//频域滤波或时域卷积;ifft( fft(x) * fft(filter)) = cov(x,filter) 
	Mat dst1 = Mat::zeros(1, D, src.type());
	Mat dst2 = Mat::zeros(1, D, src.type());

	filter2D(src, dst1, -1, lowFilter);
	filter2D(src, dst2, -1, highFilter);

	//下采样
	//数据拼接
	for (int i = 0, j = 1; i < D / 2; i++, j += 2)
	{
		src.at<float>(0, i) = dst1.at<float>(0, j);//lowFilter
		src.at<float>(0, i + D / 2) = dst2.at<float>(0, j);//highFilter
	}
	return src;
}
Mat WaveTransform::waveletReconstruct(const Mat &_src, const Mat &_lowFilter, const Mat &_highFilter)
{
	assert(_src.rows == 1 && _lowFilter.rows == 1 && _highFilter.rows == 1);
	assert(_src.cols >= _lowFilter.cols && _src.cols >= _highFilter.cols);
	//Mat &src = Mat_<float>(_src);
	Mat src = Mat_<float>(_src);

	int D = src.cols;

	//Mat &lowFilter = Mat_<float>(_lowFilter);
	//Mat &highFilter = Mat_<float>(_highFilter);
	Mat lowFilter = Mat_<float>(_lowFilter);
	Mat highFilter = Mat_<float>(_highFilter);


	/// 插值;
	Mat Up1 = Mat::zeros(1, D, src.type());
	Mat Up2 = Mat::zeros(1, D, src.type());


	for (int i = 0, cnt = 0; i < D / 2; i++, cnt += 2)
	{
		Up1.at<float>(0, cnt) = src.at<float>(0, i);     ///< 前一半
		Up2.at<float>(0, cnt) = src.at<float>(0, i + D / 2); ///< 后一半
	}

	/// 前一半低通,后一半高通
	Mat dst1 = Mat::zeros(1, D, src.type());
	Mat dst2 = Mat::zeros(1, D, src.type());
	filter2D(Up1, dst1, -1, lowFilter);
	filter2D(Up2, dst2, -1, highFilter);

	/// 结果相加
	dst1 = dst1 + dst2;
	return dst1;
}

至于一些warning,emmmm,我的强迫症还好。

图 像 融 合 是一 种 重要的 增 强 图 像信 息的 技术方 法 , 如 何 对 同 一 目 标 的多 源 遥 感 图 像 数 据 进 行有效 的融 合 , 最 大 限 度 地利 用 多 源 遥 感 数据 中 的 有 用 信 息 , 提 高 系 统的 正 确 识 别 、 判 断 和 决 策 能力 , 这是 遥感 数 据融 合研 究 的重要 内容之 一 。 图 像 融 合 技 术 的 发 展 经 历了 3 个阶段 : ( l ) 简单 的 图 像 融 合方 法 , 如 R G B 假彩色 合 成 、 I H S 彩 色 变 换 、 P CA 主 分 量 变换 法 等 ; ( 2 ) 随 着 塔 式算 子的提 出 , 在融 合领域 也出现 了 一 些较为复杂 的 模 型 ; ( 3 ) 用 小波 变换 的多 尺 度分 析 替代塔 式 算 法 。 传 统的图 像 数 据 融 合 方法对 中 、 高 分辨率 的遥 感 图 像 的 数据 融 合 一 般 都 能 取 得 比 较理 想的 效 果 , 但 对 于 低 分 辨率 的 遥 感 图 像 数 据 融 合 效 果 并 不 明 显 。 具 有 “ 数学 显 微 镜 ” 之称 的 小波变换 同时 在 时 域 和 频 域 具有分 辨率 , 对 高 频 分 量 采 用 逐 渐 精 细的 时域或 空 域 步 长 , 可 以 聚 焦 到 分析 对 象 的 任 意细节 , 对 于 剧 烈 变化 的 边 缘 , 比 常 规 的 傅 里 叶 变换 具有更 好 的适 应性 。 由 于 小波变换具有 的 特 点 , 使 它 很快在 图 像 处理 中 得 到 广 泛的应 用 。 与 传 统的 数据 融 合方 法相 比 , 小波融 合 方 法 不 仅 能 够 针 对 输 人图 像 的 不 同 特 征 来 合 理选择小波 基 以 及小 波 变 换 的次 数 , 而 且在融 合 操 作 时 又 可 以 根 据 实 际 需 要 来引 人 双方的细节 信 息 。 从 而 表 现 出 更 强 的针对 性 和 实 用 性 , 融 合效 果更 好 。 另 外 , 从实施 过程 的 灵 活性 方 面 评 价 , IH S 彩色变换 只 能 而且 必须 同 时对 三 个波 段 进行融 合 操 作 , P C A 主 分 量变换 法 的 输 人 图 像 必 须有 三 个或 三 个 以 上 , 而 小 波方 法则 能够完成 对 单 一 波 段 或多 个波 段 的 融 合 运 算 , 对 于 单 个 黑 白 图 像 的 融 合 , 小波 方 法 更 是唯一的选 择 。 本 文 提出 了 一种基 于 小波变 换 的 融 合方 法 , 使 得融 合 图 像 在最 大 限 度 保 留 多波段光 谱 信 息 的 同时 , 提 高 了 清 晰 度 和空 间 分 辨 率 。 并 在 M A T L A B 环 境 下 对 该方 法 进行 了 实 例 分 析 , 从 图 像 清 晰度 、 信 息墒 、 信 噪 比 等 几 个 方 面 对结 果 做 了 深 人的 分 析 与 对 比 , 发现 融 合 后的 图 像 均 值 和 方 差 基 本 保持 不 变 , 图 像 信 噪 比 为 ZO db 左右 , 说 明 融 合 后 的 图 像 基 本保持 了 原 始 图 像 的光 谱 特 性 , 而 信 息 嫡 和 清 晰度 有 明 显 的 提高 。 因 此基 于 小 波 变换 的 M a l l a t 多分辨 率 分 析 可 有 效 地 用 于 低分 辨 率多光 谱 遥 感 图 像 的 数 据 融 合 , 融 合 后 的图 像 在 信 息 含量 、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值