主要内容

运用图像Orthotile基础层

这个例子展示了如何注册一个图像到一个地球坐标系统和创建一个新的“地标”的形象。它需要图像处理工具箱™除了映射工具箱™。

在这个例子中,所有地理数据在同一个地球坐标系统,马萨诸塞州飞机系统(使用1983年的北美基准以米为单位)。这定义了我们的“地图坐标。”The georeferenced data include an orthoimage base layer and a vector road layer.

地理数据集是一个数字航摄照片覆盖部分村西康科德,马萨诸塞州,1997年早春,收集。

第1步:渲染Orthoimage基地瓦片地图坐标

orthoimage基地层结构到4000 - - 4000像素块,每个像素覆盖一个平方米的地图坐标。每个瓷砖存储为TIFF图像文件。西康科德的航拍照片重叠两个瓷砖orthoimage基础层。(为方便起见,本例中实际上有两个2000 -,- 2000 sub-tiles提取大4000 - 4000份。他们有相同的像素大小,但只覆盖感兴趣的区域)。

阅读所需要的两个正色摄影基地瓷砖覆盖航拍图像的程度。

[baseImage1, R1, cmap1] = readgeoraster (“concord_ortho_w.tif”);[baseImage2, R2, cmap2] = readgeoraster (“concord_ortho_e.tif”);

正确显示图像的空间位置。

mapshow甘氨胆酸(baseImage1 cmap1, R1) ax₁=;mapshow (ax₁, baseImage2 cmap2, R2)标题(“地图视图,马萨诸塞州平面坐标”);包含(“以东(米)”);ylabel (“北航(米)”);

第二步:注册航拍照片地图坐标

这个步骤使用功能cpselect,cpstruct2pairs,fitgeotform2d,imwarp和方法projtform2d / transformPointsForward一起,从图像处理工具箱栅格地图参考对象映射的工具箱。基于控制点对在一起,它们使地理注册相关的航拍照片orthoimage基础层。

看照片的天线。

inputImage = imread (“concord_aerial_sw.jpg”);图imshow (inputImage)标题(“未登记的航拍照片”)

但都正色摄影图像索引图像cpselect只需要灰度图像,将其转换成灰度。

baseGray1 = im2uint8 (ind2gray (baseImage1 cmap1));baseGray2 = im2uint8 (ind2gray (baseImage2 cmap2));

Downsample 2倍的图像,然后选择两组独立的控制点对:一个点的航拍图像出现在第一个瓷砖,和另一个点,出现在第二个瓷砖。保存工作区底部的控制点对控制点结构命名cpstruct1和cpstruct2。

n = 2;% downsample n倍负载mapexreg.mat%加载一些点,已经选择了

可选地,编辑或添加到pre-picked点使用cpselect。注意,您需要分别工作在每个orthotile控制点。

cpselect (inputImage (1: n:最终,1:n:最终,1),…baseGray1 (1: n:最终,1:n:结束),cpstruct1);
cpselect (inputImage (1: n:最终,1:n:最终,1),…baseGray2 (1: n:最终,1:n:结束),cpstruct2);

此工具帮助你选对相应的控制点。控制点是地标,你可以发现在这两个图片,像道路交叉,或自然特性。三对控制点为每个正投影瓷砖已经选择了。如果你想继续这些点,进入步骤3:推断并应用几何变换。如果你想添加一些额外的双点,通过识别地标和点击图片。拯救控制点的选择文件菜单,然后点保存到工作空间选择。保存点,覆盖变量cpstruct1cpstruct2

步骤3:推断并应用几何变换

从控制点提取控制点对结构。

[input1, base1] = cpstruct2pairs (cpstruct1);[input2, base2] = cpstruct2pairs (cpstruct2);

占将采样因子n。

input1 = n * input1 - 1;input2 = n * input2 - 1;base1 = n * base1 - 1;base2 = n * base2 - 1;

基本图像坐标转换成地图(国家飞机)坐标。

(x1, y1) = intrinsicToWorld (R1, base1 (: 1), base1 (:, 2));(x2, y2) = intrinsicToWorld (R2, base2 (: 1), base2 (:, 2));

将两套控制点和推断出一个射影变换。(投影变换应该是合理的选择,因为相机航拍图像从一个框架和地形在这方面是相当温和的。)

输入= [input1;input2];空间= [(x1, y1;x2 y2);tform = fitgeotform2d(输入、空间“射影”)
tform = projtform2d属性维数:2:(3×3双)

计算和策划(2 d)残差。

残差= transformPointsForward (tform、输入)——空间;图绘制(残差(:1),残差(:,2),“+”)标题(“控制点残差”);包含(“以东抵消(米)”);ylabel (“北航抵消(米)”);xlim (4 [4]) ylim轴(4 [4])平等的

预测注册图像角落的位置,在地图坐标,将它们连接到显示图像轮廓。

mInput =大小(inputImage, 1);nInput =大小(inputImage, 2);inputCorners = 0.5+ [0 0;通过显式地将mInput; 0通过显式地将mInput; nInputnInput 0;0 0];outputCornersSpatial = transformPointsForward (tform inputCorners);outputCornersX = outputCornersSpatial (: 1);outputCornersY = outputCornersSpatial (:, 2);图(ax1.Parent)线(outputCornersX outputCornersY,“颜色”,“w”)

计算输入图像的平均像素大小(地图单位)。

pixelSize =[函数outputCornersX (2) - outputCornersX (1),outputCornersY (2) - outputCornersY通过显式地将mInput, (1)) /函数的outputCornersX (4) - outputCornersX (5),outputCornersY (4) - outputCornersY (5)) / nInput]
pixelSize = 0.9096 - 0.8905

变量pixelSize为一个起点,选择像素的宽度和高度在我们的程序输出图像。原则上我们可以选择任何大小输出像素。然而,如果我们让他们太小我们浪费内存和计算时间,结束了一个大行和列(许多)模糊的图像。如果我们让他们太大,风险混叠图像以及不必要的丢弃在原始图像的信息。一般来说我们也希望我们的像素是广场。一个合理的启发式是选择略大于一个像素大小马克斯(pixelSize),是一个“合理的”(即数量。,0.95 or 1.0 rather than 0.9096). Here we chose 1, which means that each pixel in our georegistered image will cover one square meter on the ground. It's "nice" to have georegistered images that align along integer map coordinates for display and analysis.

outputPixelSize = 1;

选择世界极限输出像素大小的整数倍。

xWorldLimits = outputPixelSize*(地板(min (outputCornersX) / outputPixelSize),装天花板(max (outputCornersX) / outputPixelSize)] yWorldLimits = outputPixelSize*(地板(min (outputCornersY) / outputPixelSize),装天花板(max (outputCornersY) / outputPixelSize)]
xWorldLimits 209693 yWorldLimits = 911435 912583 = 208154

显示注册图像的边界框。

线(xWorldLimits ([1 1 2 2 1]), yWorldLimits ([2 1 1 2 2]),“颜色”,“红色”)

注册图像的尺寸如下:

mOutput = diff (yWorldLimits) / outputPixelSize nOutput = diff (xWorldLimits) / outputPixelSize
mOutput = 1148 nOutput = 1539

创建一个图像处理工具箱为注册图像引用对象。

R = imref2d ([mOutput nOutput], xWorldLimits, yWorldLimits)
R = imref2d属性:XWorldLimits: 209693年[208154]YWorldLimits: 912583年[911435]图象尺寸:1539年[1148]PixelExtentInWorldX: 1 PixelExtentInWorldY: 1 ImageExtentInWorldX: 1539 ImageExtentInWorldY: 1148 XIntrinsicLimits: [0.5000 - 1.5395 e + 03] YIntrinsicLimits: [0.5000 - 1.1485 e + 03]

创建一个地图栅格参考对象,映射工具箱与一个图像处理工具箱引用对象。

Rmap = maprefcells (R.XWorldLimits, R。YWorldLimits R.ImageSize,“ColumnsStartFrom”,“北”)
Rmap = MapCellsReference属性:XWorldLimits: 209693年[208154]YWorldLimits: 912583年[911435]RasterSize: 1539年[1148]RasterInterpretation:“细胞”ColumnsStartFrom:“北”RowsStartFrom:“西方”CellExtentInWorldX: 1 CellExtentInWorldY: 1 RasterExtentInWorldX: 1539 RasterExtentInWorldY: 1148 XIntrinsicLimits: [0.5 - 1539.5] YIntrinsicLimits: [0.5 - 1148.5] TransformationType:“直线”CoordinateSystemType:“平面”ProjectedCRS: []

应用几何转换使用imwarp。翻转其输出列运行从北到南。

注册= flipud (imwarp (inputImage tform,“OutputView”右));图imshow(注册)

您可以编写注册图像与世界TIFF文件,从而运用到我们的地图坐标。

imwrite(注册,“concord_aerial_sw_reg.tif”);worldfilewrite (Rmap getworldfilename (concord_aerial_sw_reg.tif "));

步骤4:在地图中显示注册图像坐标

显示注册图像相同的(地图坐标)轴orthoimage基地瓷砖。注册图像不完全填满其边界框,它包括null-filled三角形。创建一个α数据面具使这些填充区域呈现透明。

alphaData =注册(:,:1);alphaData (alphaData ~ = 0) = 255;图mapshow (baseImage1 cmap1, R1) ax2 = gca;mapshow (ax2、baseImage2 cmap2 R2)标题(“地图视图,马萨诸塞州平面坐标”);包含(“以东(米)”);ylabel (“北航(米)”);注册,mInput = mapshow (ax2 Rmap);mInput。AlphaData = AlphaData;

你可以评估登记通过查看功能,跨度注册图像和正投影图像。

第五步:覆盖向量道路层(从Shapefile)

使用shapeinforeadgeotable了解向量的属性道路层。使道路在同一轴和基础瓷砖和注册的形象。

roadsfile =“concord_roads.shp”;roadinfo = shapeinfo (roadsfile);道路= readgeotable (roadsfile);

基于CLASS属性创建编号(路)的类型。请注意,非常轻微道路类值等于6,所以不要显示它们。

roadspec = makesymbolspec (“行”,{“类”6“可见”,“关闭”});mapshow (ax2、道路、“SymbolSpec”roadspec,“颜色”,“青色”)

观察到的道路排队相当不错的道路图像。两个明显的线性特征的图像没有公路,但铁路。线性特性趋势大致东西方和跨越两个基地瓷砖是马萨诸塞湾的菲奇堡通勤铁路运输机构。趋势基本是西北-东南走向的线性特性是前者Framingham-Lowell辅助线。

学分

concord_orthow_w。tif, concord_ortho_e。tif, concord_roads.shp:

地理和环境信息办公室(MassGIS),马萨诸塞州联邦执行办公室环境事务的http://www.state.ma.us/mgis
有关更多信息,运行:
> > concord_ortho类型。txt concord_roads.txt > >类型

concord_aerial_sw.jpg

可见颜色航拍照片由mPower3 /出现。
有关更多信息,运行:
> >类型concord_aerial_sw.txt

另请参阅

功能

对象