|
|
// QB_ImageProcessFunc.cpp : 定义 DLL 的初始化例程。
|
|
|
//
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
|
#define IMGPROCESS_EXPORTS
|
|
|
|
|
|
// 包含头文件
|
|
|
#include "QB_ImgProcessFun.h"
|
|
|
#include "SysGeoCorrect.h"
|
|
|
#include "GeoTIFFEdit.h"
|
|
|
#include "IntensityControl.h"
|
|
|
#include "ContrastControl.h"
|
|
|
#include "DefinitionControl.h"
|
|
|
#include "GeoInfoCalculate.h"
|
|
|
#include "GCPGeoCorrect.h"
|
|
|
#include "DecreaseHazeControl.h"
|
|
|
#include "GetElevation.h"
|
|
|
#include "fuseImg.h"
|
|
|
#include "superResolutionImg.h"
|
|
|
|
|
|
// 功能:图像去雾处理
|
|
|
|
|
|
//1.1. 图像去雾控制
|
|
|
IMGPROCESS_API bool DoDehazeCtrl(QBStru *qbData, int A_MAX, double degree, bool bSrcFirst)
|
|
|
{
|
|
|
return QBStruDeHazeControl(qbData, A_MAX, degree, bSrcFirst);
|
|
|
}
|
|
|
|
|
|
//1.2 功能:图像去雾控制(函数重载)
|
|
|
IMGPROCESS_API bool DoDehazeCtrl(ImgStru* src, ImgStru* dst, int A_MAX, double degree)
|
|
|
{
|
|
|
return ImgStruDeHazeControl(src, dst, A_MAX, degree);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//2.1 功能:图像亮度控制
|
|
|
IMGPROCESS_API bool DoIntensityCtrl(QBStru *qbData, int degree, bool bSrcFirst)
|
|
|
{
|
|
|
return QBStruIntensityControl(qbData, degree, bSrcFirst);
|
|
|
}
|
|
|
|
|
|
//2.2 功能:图像亮度控制
|
|
|
IMGPROCESS_API bool DoIntensityCtrl(ImgStru* src, ImgStru* dst, int degree)
|
|
|
{
|
|
|
return ImgStruIntensityControl(src, dst, degree);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//3.1 功能:图像对比度控制
|
|
|
IMGPROCESS_API bool DoContrastCtrl(QBStru *qbData, int degree, bool bSrcFirst)
|
|
|
{
|
|
|
return QBStruContrastControl(qbData, degree, bSrcFirst);
|
|
|
}
|
|
|
|
|
|
//3.2 功能:图像对比度控制(函数重载)
|
|
|
IMGPROCESS_API bool DoContrastCtrl(ImgStru* src, ImgStru* dst, int degree)
|
|
|
{
|
|
|
return ImgStruContrastControl(src, dst, degree);
|
|
|
}
|
|
|
|
|
|
|
|
|
//4.1 功能:图像清晰度控制
|
|
|
IMGPROCESS_API bool DoDefinitionCtrl(QBStru *qbData, int degree, bool bSrcFirst)
|
|
|
{
|
|
|
return QBStruDefinitionControl(qbData, degree, bSrcFirst);
|
|
|
}
|
|
|
|
|
|
//4.2 功能:图像清晰度控制(函数重载)
|
|
|
IMGPROCESS_API bool DoDefinitionCtrl(ImgStru* src, ImgStru* dst, int degree)
|
|
|
{
|
|
|
return ImgStruDefinitionControl(src, dst, degree);
|
|
|
}
|
|
|
|
|
|
|
|
|
//5.1 功能:计算图像中心点经纬度坐标、载荷等效俯仰角和方位角
|
|
|
IMGPROCESS_API bool DoCalImgCenterCoordinate(double &Lon, double &Lat, double &H, const struQB_FJ *frame)
|
|
|
{
|
|
|
return CalImgCenterCoordinate(Lon, Lat, H, frame);
|
|
|
}
|
|
|
|
|
|
//5.2 功能:计算图像中任意点经纬度坐标
|
|
|
IMGPROCESS_API bool DoCalAnyPtCoordinate(double &Lon, double &Lat, double &H, const struQB_FJ *frame, int pt_x, int pt_y)
|
|
|
{
|
|
|
return CalAnyPtCoordinate(Lon, Lat, H, frame, pt_x, pt_y);
|
|
|
}
|
|
|
|
|
|
//6.1 功能:基于复接数据的图像系统级几何校正
|
|
|
IMGPROCESS_API bool DoSysGeoCorrect(QBStru *qbData, bool bSrcFirst)
|
|
|
{
|
|
|
return SysGeoCorrectImg(qbData, bSrcFirst);
|
|
|
}
|
|
|
|
|
|
//6.2 功能:基于复接数据的图像系统级几何校正(重载)
|
|
|
IMGPROCESS_API bool DoSysGeoCorrect(ImgStru *dstImg, const ImgStru *srcImg, const struQB_FJ *frameData)
|
|
|
{
|
|
|
return SysGeoCorrectImg(dstImg, srcImg, frameData);
|
|
|
}
|
|
|
|
|
|
//6.3 功能:基于地面控制点的几何精校正
|
|
|
IMGPROCESS_API bool DoGCPGeoCorrectImg(ImgStru *dstImg, const ImgStru *srcImg, const std::vector<Point2d>& GCP_XY, const std::vector<Point2d>& GCP_LonLat, int type)
|
|
|
{
|
|
|
return GCPGeoCorrectImg(dstImg, srcImg, GCP_XY, GCP_LonLat, type);
|
|
|
}
|
|
|
|
|
|
//6.4 功能: OpenCV图像格式基于地面控制点的几何精校正
|
|
|
IMGPROCESS_API bool DoGCPGeoCorrectImg( cv::Mat& dstImg, GeoBoundingBox& LBbox, const cv::Mat& srcImg, const std::vector<cv::Point2d>& GCP_XY, const std::vector<cv::Point2d>& GCP_LonLat, int type)
|
|
|
{
|
|
|
return GCPGeoCorrectImg(dstImg, LBbox, srcImg, GCP_XY, GCP_LonLat, type);
|
|
|
}
|
|
|
|
|
|
//6.5 功能:基于控制点的几何校正
|
|
|
IMGPROCESS_API bool DoCPBasedImgCorrect( cv::Mat &dstImg, const cv::Mat &srcImg, const std::vector<cv::Point2d>& GCP_xy, const std::vector<cv::Point2d>& GCP_XY)
|
|
|
{
|
|
|
return CPBasedImgCorrect(dstImg, srcImg, GCP_xy, GCP_XY);
|
|
|
}
|
|
|
|
|
|
|
|
|
//7.1 功能:保存情报数据至本地文件(GeoTiff格式)
|
|
|
IMGPROCESS_API bool SaveToGeoTIFF(QBStru *qbData, string savePath)
|
|
|
{
|
|
|
return SaveQBDataToGeoTIFF(qbData, savePath);
|
|
|
}
|
|
|
|
|
|
//7.2 功能:保存图像数据至本地文件(GeoTiff格式)
|
|
|
IMGPROCESS_API bool SaveToGeoTIFF(const ImgStru *Img, string savePath)
|
|
|
{
|
|
|
return SaveImgStruToGeoTIFF(Img, savePath);
|
|
|
}
|
|
|
|
|
|
//7.3 功能:保存图像数据至本地文件(GeoTiff格式)
|
|
|
IMGPROCESS_API bool SaveToGeoTIFF(cv::Mat& Img, GeoBoundingBox& LBbox, string savePath)
|
|
|
{
|
|
|
return SaveImgStruToGeoTIFF(Img, LBbox, savePath);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//8.1 功能:计算图像(几何校正前)中两点间的距离和方位(重载)
|
|
|
IMGPROCESS_API bool CalculateTwoPtsDistanceAzimuth(double &distance, double &azAngle, const struQB_FJ *frameData, cv::Point pt1, cv::Point pt2)
|
|
|
{
|
|
|
return CalTwoPointsDistanceAzimuth(distance, azAngle, frameData, pt1, pt2);
|
|
|
}
|
|
|
|
|
|
//8.2 功能:计算图像中两点间的距离和方位
|
|
|
IMGPROCESS_API bool CalculateTwoPtsDistanceAzimuth(double &distance, double &azAngle, const QBStru *qbData, cv::Point pt1, cv::Point pt2, int flags)
|
|
|
{
|
|
|
return QBStruCalTwoPtsDistanceAzimuth(distance, azAngle, qbData, pt1, pt2, flags);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//9.1 功能:计算图像中多点组成的多边形面积
|
|
|
IMGPROCESS_API bool CalculatePloygonArea(double& area, const struQB_FJ *frameData, cv::Point* points, int count)
|
|
|
{
|
|
|
return CalPolygonArea(area, frameData, points, count);
|
|
|
}
|
|
|
|
|
|
//9.2 功能:计算图像中多边形面积
|
|
|
IMGPROCESS_API bool CalculatePloygonArea(double &area, const QBStru *qbData, cv::Point* point, int count, int flags)
|
|
|
{
|
|
|
return QBStruCalPolygonArea(area, qbData, point, count, flags);
|
|
|
}
|
|
|
|
|
|
|
|
|
//10 读取高程
|
|
|
//功能:基于经纬度读取地面高程
|
|
|
//输入:
|
|
|
// 1. fLonDeg: 经度(度)
|
|
|
// 2. fLatDeg: 纬度(度)
|
|
|
// 3. sDir: 高程数据文件存储路径, 默认设为:"D:\\ElevationData"
|
|
|
//
|
|
|
//输出:
|
|
|
// 1. fElevator:高程(米)
|
|
|
//
|
|
|
//返回值:若函数运行成功,返回true,否则返回false
|
|
|
bool GetElevation( float& fElevator, double dLonDeg, double dLatDeg, string sDir, bool bNearst)
|
|
|
{
|
|
|
return GetDem(fElevator, dLonDeg, dLatDeg, sDir, bNearst);
|
|
|
}
|
|
|
|
|
|
// 清理DEM记忆
|
|
|
void ClearDem()
|
|
|
{
|
|
|
ClearDemMem();
|
|
|
}
|
|
|
|
|
|
|
|
|
// 11.1 功能:函数 DoFastFuseImgRGBplusIR() 快速融合两幅输入图像
|
|
|
// 输入:
|
|
|
// img1: 输入图像1:RGB:三通道
|
|
|
// img2: 输入图像2:IR:三通道或单通道
|
|
|
// 输出:
|
|
|
// dst: 融合图像
|
|
|
// 返回值:
|
|
|
// 运算有效返回true,否则返回false
|
|
|
bool DoFastFuseImgRGBplusIR(cv::Mat &dst, const cv::Mat RGBimg, const cv::Mat IRimg)
|
|
|
{
|
|
|
return FastFuseImgRGBplusIR(dst, RGBimg, IRimg);
|
|
|
}
|
|
|
|
|
|
|
|
|
// 11.2 功能:函数 DoFuseImgRGBplusIR() 基于小波变换融合两幅输入图像
|
|
|
// 输入:
|
|
|
// img1: 输入图像1:RGB:三通道
|
|
|
// img2: 输入图像2:IR:三通道或单通道
|
|
|
// wname: 小波名称
|
|
|
// 支持小波:
|
|
|
// 1. haar
|
|
|
// 2. symN [1, 10]
|
|
|
// 3. dbN [1, 10]
|
|
|
// 4. coifN [1, 5]
|
|
|
// level:小波分解层数
|
|
|
// 输出:
|
|
|
// dst: 融合图像
|
|
|
// 返回值:
|
|
|
// 运算有效返回true,否则返回false
|
|
|
bool DoFuseImgRGBplusIR(cv::Mat &dst, const cv::Mat RGBimg, const cv::Mat IRimg, const string wname, const unsigned int level)
|
|
|
{
|
|
|
return FuseImgRGBplusIR(dst, RGBimg, IRimg, wname, level);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 11.3 功能:函数 FuseImg() 基于小波变换融合两幅输入图像
|
|
|
// 输入:
|
|
|
// img1: 输入图像1
|
|
|
// img2: 输入图像2
|
|
|
// wname: 小波名称
|
|
|
// 支持小波:
|
|
|
// 1. haar
|
|
|
// 2. symN [1, 10]
|
|
|
// 3. dbN [1, 10]
|
|
|
// 4. coifN [1, 10]
|
|
|
// level:小波分解层数
|
|
|
// 输出:
|
|
|
// dst: 融合图像
|
|
|
// 返回值:
|
|
|
// 运算有效返回true,否则返回false
|
|
|
bool DoFuseImg(cv::Mat &dst, const cv::Mat img1, const cv::Mat img2, const string wname, const unsigned int level)
|
|
|
{
|
|
|
return FuseImg(dst, img1, img2, wname, level);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 功能:灰度图像(红外图像)超分辨率构建
|
|
|
// 输入:
|
|
|
// imgDeque: 输入图像序列,要求图像尺寸相同,类型为CV_8UC1
|
|
|
// 输出:
|
|
|
// dst: 输出超分图像
|
|
|
// 返回重建中有效的图像数目
|
|
|
int GetSuperResolutionImg(cv::Mat &dst, const std::deque<cv::Mat> &imgDeque, double multiple)
|
|
|
{
|
|
|
return SuperResolutionImg(dst, imgDeque, multiple);
|
|
|
} |