Этот пример показывает, как создать версию полуразрешения изображения TIFF, на которое геоссылаются, с помощью ссылочных объектов и функций Image Processing Toolbox™ ind2gray
и imresize
.
Считайте изображение TIFF индексированного цвета и преобразуйте его в шкалу полутонов. Размер изображения 2000 2000.
[X, cmap] = imread('concord_ortho_w.tif');
I_orig = ind2gray(X, cmap);
Считайте соответствующий worldfile. Каждый пиксель изображения покрывает однометровый квадрат на карте.
R_orig = worldfileread('concord_ortho_w.tfw','planar',size(X));
Выберите удобный формат для отображения результата.
currentFormat = get(0,'format'); format short g R_orig
R_orig = MapCellsReference with properties: XWorldLimits: [207000 209000] YWorldLimits: [911000 913000] RasterSize: [2000 2000] RasterInterpretation: 'cells' ColumnsStartFrom: 'north' RowsStartFrom: 'west' CellExtentInWorldX: 1 CellExtentInWorldY: 1 RasterExtentInWorldX: 2000 RasterExtentInWorldY: 2000 XIntrinsicLimits: [0.5 2000.5] YIntrinsicLimits: [0.5 2000.5] TransformationType: 'rectilinear' CoordinateSystemType: 'planar'
Разделите на два разрешение, создав меньшее изображение (1000 на 1000).
I_half = imresize(I_orig, size(I_orig)/2, 'bicubic');
Измененное изображение имеет те же пределы как оригинал, только меньший размер, так скопируйте ссылочный объект и сбросьте его свойство RasterSize.
R_half = R_orig; R_half.RasterSize = size(I_half)
R_half = MapCellsReference with properties: XWorldLimits: [207000 209000] YWorldLimits: [911000 913000] RasterSize: [1000 1000] RasterInterpretation: 'cells' ColumnsStartFrom: 'north' RowsStartFrom: 'west' CellExtentInWorldX: 2 CellExtentInWorldY: 2 RasterExtentInWorldX: 2000 RasterExtentInWorldY: 2000 XIntrinsicLimits: [0.5 1000.5] YIntrinsicLimits: [0.5 1000.5] TransformationType: 'rectilinear' CoordinateSystemType: 'planar'
Отобразите каждое изображение в координатах карты и отметьте контрольную точку красным + в обеих фигурах.
xlimits = [208000 208250]; ylimits = [911800 911950]; x = 208202.21; y = 911862.70; figure mapshow(I_orig,R_orig) hold on plot(x,y,'r+') xlim(xlimits) ylim(ylimits) ax = gca; ax.TickDir = 'out';
figure mapshow(I_half,R_half) hold on plot(x,y,'r+') xlim(xlimits) ylim(ylimits) ax = gca; ax.TickDir = 'out';
Графически, они совпадают, даже при том, что то же местоположение карты соответствует двум другим местам во внутренних координатах.
[xIntrinsic1, yIntrinsic1] = worldToIntrinsic(R_orig, x, y)
xIntrinsic1 = 1202.7
yIntrinsic1 = 1137.8
[xIntrinsic2, yIntrinsic2] = worldToIntrinsic(R_half, x, y)
xIntrinsic2 = 601.6
yIntrinsic2 = 569.15
format(currentFormat);
concord_ortho_w.tif, concord_ortho_w.tfw - выведенный от ортофото мозаик от:
Office of Geographic and Environmental Information (MassGIS),
Commonwealth of Massachusetts Executive Office of Environmental Affairs
http://www.state.ma.us/mgis
For more information, run:
>> type concord_ortho.txt
MapCellsReference
| imread
| imresize
| worldToIntrinsic
| worldfileread