ISODATA处理遥感影像(GDAL和OPENCV库)

本文介绍了一种基于ISODATA算法处理遥感影像的程序,利用GDAL库读取影像数据,OpenCV库进行处理。通过设置参数,如聚类数、阈值,对遥感影像进行分类。代码中包含数据预处理、聚类中心计算、样本分配、类中心更新等步骤。
摘要由CSDN通过智能技术生成

本程序在win32窗口编译运行,用的isodata算法对遥感影像进行分类处理,具体原理网上到处都是,我就不说了,直接上代码,可能会少个大括号,需要配置opencv库和gdal库,具体怎么配网上也有教程。

#include “stdafx.h”
#include “cv.h”
#include “highgui.h”
#include “string”
#include <math.h>
#include “iostream”
#include <opencv2/ml/ml.hpp>
#include <imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
#include “vector”
#include “algorithm”
#include “gdal.h”
#include “gdal_priv.h”
#include <assert.h>
//#pragma comment (lib , “FreeImage.Lib”)

using namespace cv;
using namespace std;
#define BYTE unsigned char

/*img是原图
Nc是初始的设定的聚类数
K是期望得到的聚类数
ThetaN是每类中最少的样本数目,若少于此数则去掉该类别
ThetaS是一个类别中,样本特征中最大标准差。若大于这个值,则可能分裂
ThetaC是两个类别中心间的最小距离,若小于此数,把两个类别需进行合并
I是迭代次数
L是在一次合并操作中,可以合并的类别的最多对数
*/

cv::Mat GDAL2Mat(const char* fileName)
{
GDALAllRegister();//驱动注册
GDALDataset *poDataset = (GDALDataset *)GDALOpen(fileName, GA_ReadOnly); // GDAL数据集
int Cols = poDataset->GetRasterXSize(); // 列
int Rows = poDataset->GetRasterYSize(); // 行
int BandSize = poDataset->GetRasterCount();//波段数
double *adfGeoTransform = new double[6];
poDataset->GetGeoTransform(adfGeoTransform);

std::vector <cv::Mat>imgMat;  // 定义元素为Mat的vecoter向量,向量的每一个元素存储一个波段的数据
uchar *pafScan = NULL;   // 存储数据

for (int i = 0;i< BandSize;i++)
{
	GDALRasterBand *pBand = poDataset->GetRasterBand(i + 1);//读取第i+1个波段的数据
	pafScan = new uchar[Cols*Rows];
	pBand->RasterIO(GF_Read, 0, 0, Cols, Rows, pafScan, Cols, Rows, GDT_Byte, 0, 0);//将第i+1个波段的数据存入pafScan
	cv::Mat A = cv::Mat(Rows, Cols, CV_8UC1, pafScan);//将第i+1个波段的数据存存入A中
	imgMat.push_back(A.clone());
	delete[]pBand;
	A.release();
}
delete[]pafScan;
cv::Mat img;
img.create(Rows, Cols, CV_8UC1(BandSize));
merge(imgMat, img);
imgMat.clear();
return img;

}

int* isodata(Mat img, int Nc, int K, int ThetaN, double ThetaS, double ThetaC, int I = 10, int L = 1) {
int Rows = img.rows;//行
int Cols = img.cols;//列
int Bands = img.channels();//波段
int HI = 1;
int CI = 0;//每次循环合并次数
double* z = new double[BandsNc];//分配内存
Step1://确定参数和初始聚类中心
for (int i &

本程序主要对遥感图像实现三种处理:几何校正、图像增强和图像配准。这三种处理都可以独立实现,然而对于原始的遥感图像将这三种处理依次进行效果更佳。 具体操作步骤如下: 1.在主窗口打开图像1 2.选择【几何校正】菜单,打开【图像几何校正】对话框进行几何校正。在此对话框中,首先打开待校正图像2,然后点击【选取特正点】按钮,按照提示依次在待校正图像和基准图像中手动选取特征点,最后点击【校正图像】得到几何校正结果,如果达到预期效果,则点击【保存并在主窗口打开】按钮,保存此校正图片,并在主窗口打开。 3.选择【图像增强】菜单,打开【图像增强】对话框进行图像增强。在此对话框中,首先在相应的处理类别(如:直方图增强、灰度增强等)中选择具体方法(如:均衡化、规定化等),然后点击本类别的按钮。增强后的结果会在右侧显示,如果达到预期效果,则点击【保存并在主窗口打开】按钮,保存此增强后的图片,并在主窗口打开。 4.选择【图像配准】菜单,打开【图像配准】对话框进行图像配准。在此对话框中,首先打开待匹配图像3,然后选择“半自动”或“手动”方法并点击【选取特正点】按钮,按照提示依次在待配准图像和基准图像中半自动或手动选取特征点(如果在半自动选取中特征点对应错误,可以更改特征点),最后点击【匹配图像】得到图像配准结果,如果达到预期效果,则点击【保存并在主窗口打开】按钮,保存此校正图片,并在主窗口打开。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值