失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 遥感图像几何校正 matlab 利用多项式实现图像几何校正(Matlab实现)

遥感图像几何校正 matlab 利用多项式实现图像几何校正(Matlab实现)

时间:2023-01-04 20:10:20

相关推荐

遥感图像几何校正 matlab 利用多项式实现图像几何校正(Matlab实现)

1.原理简述:

根据两幅图像中的一些已知对应点(控制点对),建立函数关系式,通过坐标变换,实现失真图像的几何校正。

设两幅图像坐标系统之间畸变关系能用解析式来描述:

根据上述的函数关系,可以依次计算畸变图像每个像素的矫正坐标值,保持各像素值不变,这样生成一幅矫正图像。

2.实现过程:

(1)因此首先要得到多项式,matlab提供了拟合多项式的函数 Isqcurvefit,

格式:lsqcurvefit(f,a,x,y)

f:符号函数句柄

a:最开始预估的值(预拟合的未知参数的估计值)。如上面的问题如果我们预估A为1,B为2,则a=[12]

x:我们已经获知的x的值

y:我们已经获知的x对应的y的值

函数的返回值为对应多项式系数组成的一维数组。

示例(二次多项式):建立由校正图像到畸变图像的函数

function [F] = fun(a,b)

x = b(:,1);

y = b(:,2);

F = a(1)+a(2)*x+a(3)*y+a(4)*x.^2+a(5)*x.*y+a(6)*y.^2;

end

x0 = fixedPoints(:,1);

y0 = fixedPoints(:,2);

x1 = movingPoints(:,1);

y1 = movingPoints(:,2);

data = [x1,y1];

a = [1 1 1 1 1 1];

a1 = lsqcurvefit('fun',a,data,x0);

a2 = lsqcurvefit('fun',a,data,y0);

(2)根据得到的二项式,由校正图像每个像素坐标(x,y)出发,算出在已知畸变图像上的对应坐标(x',y'),使像元一一对应,赋予校正图像对应畸变图像的像元

的像素值,最终得到校正图像。

示例:

J2 = uint8(zeros(size(J)));

for rgb = 1:3

for i = 1:m

for j = 1:n

if round(fun(a1,[i,j]))>=1 && round(fun(a1,[i,j]))<=c && round(fun(a2,[i,j]))>=1 && round(fun(a2,[i,j]))<=d

J2(i,j,rgb) = J1(round(fun(a1,[i,j])),round(fun(a2,[i,j])),rgb);

end

end

end

end

这样生成的图像像素分布不规则,会出现像素挤压、疏密不均的现象,因此最后还需对不规则图像进行灰度内插生成规则的栅格图像。

源码:

I = imread('sp.tif');

J = imread('tm.tif');

[m,n] = size(J);

[o,p] = size(I);

%cpselect(J,I);

%xlswrite('data1.xls',fixedPoints);

%xlswrite('data2.xls',movingPoints);

%%重采样

J1 = J(1:m/o:end,1:n/p:end,1:3);

[c,d,q]= size(J1);

fixedPoints = xlsread('data1.xls');

movingPoints = xlsread('data2.xls');

x0 = fixedPoints(:,1);

y0 = fixedPoints(:,2);

x1 = movingPoints(:,1);

y1 = movingPoints(:,2);

data = [x1,y1];

a = [1 1 1 1 1 1];

a1 = lsqcurvefit('fun',a,data,x0);

a2 = lsqcurvefit('fun',a,data,y0);

%多项式几何校正

J2 = uint8(zeros(size(J)));

for rgb = 1:3

for i = 1:m

for j = 1:n

if round(fun(a1,[i,j]))>=1 && round(fun(a1,[i,j]))<=c && round(fun(a2,[i,j]))>=1 && round(fun(a2,[i,j]))<=d

J2(i,j,rgb) = J1(round(fun(a1,[i,j])),round(fun(a2,[i,j])),rgb);

end

% J2(round(fun(a1,[i,j])),round(fun(a2,[i,j]))) = J(i,j);

% end

end

end

end

[x,y] = size(J2);

%根据数据游标取截取区域的左上方点

J3 = imcrop(I,[98 180 60*o/x 60*p/y]);

J4 = imcrop(J2,[41 80 60 60]);

[k,y,z] = size(J3);

[h,t,e] = size(J4);

%%重采样

%双线性内插法

u = h/k;

v = t/y;

itp = uint8(zeros(k,y,3));

for rgb = 1:3

for i = ceil(1/u):k-1

iu = floor(i*u);

for j = ceil(1/v):y-1

jv = floor(j*v);

itp(i,j,rgb) = (1-(i*u-iu))*(1-(j*v-jv))*J4(iu,jv,rgb)...

+(1-(i*u-iu))*(j*v-jv)*J4(iu,jv+1,rgb)...

+(i*u-iu)*(1-(j*v-jv))*J4(iu+1,jv,rgb)...

+(i*u-iu)*(j*v-jv)*J4(iu+1,jv+1,rgb);

end

end

end

%去黑边

for rgb = 1:3

for i = 1:3

for j = 1:175

itp(i,j,rgb) = J4(ceil(i*u),ceil(j*v),rgb);

itp(145,j,rgb) = J4(43,ceil(j*v),rgb);

end

end

for j = 1:2

for i = 1:145

itp(i,j,rgb) = J4(ceil(i*u),ceil(j*v),rgb);

itp(i,175,rgb) = J4(ceil(i*u),61,rgb);

end

end

end

imwrite(J3,'Core1.bmp','bmp');

imwrite(itp,'Core2.bmp','bmp');

subplot(231),imshow(J),title('待配准图像');

subplot(232),imshow(I),title('基准图像');

subplot(233),imshow(J2),title('多项式几何校正后');

subplot(234),imshow(J3),title('基准影像裁剪后');

subplot(235),imshow(itp),title('校正影像裁剪重采样后');

% %基准图重采样

% kh = zuixiaogongbeishu(k,h);

% yt = zuixiaogongbeishu(y,t);

% u = h/kh;v = t/yt;

% J5 = J3(1:k/kh:end,1:y/yt:end,1:3);

% %配准图 双线性内插法重采样

% itp = uint8(zeros(kh,yt,3));

% for rgb = 1:3

% for i = floor(1/u):kh-1

% iu = floor(i*u);

% for j = floor(1/v):yt-1

% jv = floor(j*v);

% itp(i,j,rgb) = (1-(i*u-iu))*(1-(j*v-jv))*J4(iu,jv,rgb)...

% +(1-(i*u-iu))*(j*v-jv)*J4(iu,jv+1,rgb)...

% +(i*u-iu)*(1-(j*v-jv))*J4(iu+1,jv,rgb)...

% +(i*u-iu)*(j*v-jv)*J4(iu+1,jv+1,rgb);

% end

% end

% end

% %去黑边

% for rgb = 1:3

% for i = 1:144

% for j = 1:10675

% itp(i,j,rgb) = J4(ceil(i*u),ceil(j*v),rgb);

% end

% end

% for j = 1:175

% for i = 1:6235

% itp(i,j,rgb) = J4(ceil(i*u),ceil(j*v),rgb);

% end

% end

% end

%

% itp1 = uint8(zeros(6193,10615,3));

% itp1(1:6193,1:10615,1:3) = itp(1:6193,1:10615,1:3);

% imwrite(J5,'Crop1.bmp','bmp');

% J5 = imread('Crop1.bmp');

% imwrite(itp1,'Crop2.bmp','bmp');

% J6 = imread('Crop2.bmp');

% subplot(231),imshow(J),title('待配准图像');

% subplot(232),imshow(I),title('基准图像');

% subplot(233),imshow(J2),title('多项式几何校正后');

% subplot(234),imshow(J5),title('基准影像裁剪重采样后');

% subplot(235),imshow(J6),title('校正影像裁剪重采样后');

% a = imread('基准.bmp');

% b = imread('重采样后图像.bmp');

% c = imcrop(a,[1,100,100,100]);

% d = imcrop(b,[1,100,100,100]);

% imwrite(c,'Core3.bmp','bmp');

% imwrite(d,'Core4.bmp','bmp');

非刚性图像配准 matlab简单示例 demons算法

-05-25 17:21 非刚性图像配准 matlab简单示例 demons算法, % Clean clc; clear all; close all; % Compile the mex f ...

利用OpenCV给图像添加中文标注

利用OpenCV给图像添加中文标注 : 参考:/s/blog_6bbd2dd101012dbh.html 和/ ...

&lbrack;图像&rsqb;用Matlab在图像上画矩形框

原创文章,欢迎转载.转载请注明:转载自祥的博客 原文链接:/humanking7/article/details/46819527 在毕业设计的时候写论文画图 ...

利用GDI&plus;处理图像的色彩

首先先介绍一下ColorMatrix结构体:表示颜色的变换关系,定义如下: typedef struct { REAL m[][]; } ColorMatrix; ColorMatrix结构体一般和I ...

OpenCV与Python之图像的读入与显示以及利用Numpy的图像转换

1:读入图像,显示图像与保存图像 代码: import cv2 img=cv2.imread('lena.jpg',cv2.IMREAD_COLOR) cv2.namedWindow('lena',c ...

OpenCV利用矩阵实现图像旋转

利用OpenCV的矩阵操作实现图像的逆时针旋转90度操作 代码 Mat src = imread("C:\\Users\\fenggl\\Desktop\\测试.jpg",MREA ...

【图像】Matlab图像标定工具箱

参考教程: Matlab工具箱教程 http://www.vision.caltech.edu/bouguetj/calib_doc/ 摄像机模型 http://oliver.zheng.blog ...

利用OpenCV检测图像中的长方形画布或纸张并提取图像内容

基于知乎上的一个答案.问题如下: 也就是在一张照片里,已知有个长方形的物体,但是经过了透视投影,已经不再是规则的长方形,那么如何提取这个图形里的内容呢?这是个很常见的场景,比如在博物馆里看到一幅很喜欢 ...

在opencv3中利用SVM进行图像目标检测和分类

采用鼠标事件,手动选择样本点,包括目标样本和背景样本.组成训练数据进行训练 1.主函数 #include "stdafx.h" #include "opencv2/ope ...

随机推荐

android之Fragment基础详解(一)

一.Fragment的设计哲学 Android在3.0中引入了fragments的概念,主要目的是用在大屏幕设备上--例如平板电脑上,支持更加动态和灵活的UI设计.平板电脑的屏幕比手机的大得多,有 ...

Redux源码分析之createStore

接着前面的,我们继续,打开createStore.js, 直接看最后, createStore返回的就是一个带着5个方法的对象. return { dispatch, subscribe, getSt ...

简单说说Android自定义view学习推荐的方式

这几天比较受关注,挺开心的,嘿嘿. 这里给大家总结一下学习自定义view的一些技巧. 以后写自定义view可能不会写博客了,但是可以开源的我会把源码丢到github上我的地址:https://git ...

webdriver until

#!author zhangfrom selenium import webdriverfrom time import sleep,ctimedriver = webdriver.Firefox() ...

JDBC(12)—DBUtils工具类

DBUtils:commons-dbutils是Apache组织提供的一个开源JDBC工具库,它是对JDBC的简单封装,并且使用dbutils会极大的简化jdbc编码的工作量,同时不会影响到程序的性能 ...

PAT 乙级 1091 N-自守数 (15 分)

1091N-自守数(15 分) 如果某个数K的平方乘以N以后,结果的末尾几位数等于K,那么就称这个数为“N-自守数”.例如3×92​2​​=25392,而25392的末尾两位正好是 ...

VS远程调试与附加调试

使用场景 假如你要开发的程序需要运行在独特的硬件上,比如:服务器,然而这个"独特的硬件"却不能给你装VS,这时候远程调试就登场了. 测试工具/环境一览 Key Value VS版本 ...

BZOJ 2594 水管局长 - LCT 维护链信息

Solution 由于链信息不好直接维护, 所以新建一个节点存储边的权值, 并把这个节点连向 它所连的节点 $u$, $v$ $pushup$中更新维护的 $mx$ 指向路径上权值最大的边的编号. 由 ...

Mac环境下配置Tomcat&plus;Eclipse

下载Tomcat 首先在 Tomcat官方网站 找到自己合适的版本,下载 tar.gz 版本的,下载完成后解压缩到一个目录,进入这个目录下的 bin 执行 startup.sh,如果看到下面的界面,表 ...

快速切题 sgu113 Nearly prime numbers 难度&colon;0

113. Nearly prime numbers time limit per test: 0.25 sec.memory limit per test: 4096 KB Nearly prime ...

如果觉得《遥感图像几何校正 matlab 利用多项式实现图像几何校正(Matlab实现)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。