You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

259 lines
7.4 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// 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 输入图像1RGB三通道
// img2 输入图像2IR三通道或单通道
// 输出:
// 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 输入图像1RGB三通道
// img2 输入图像2IR三通道或单通道
// 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);
}