Экспорт изображений и растровых сеток к GeoTIFF

Этот пример показывает, как записать данные ссылаемый к стандартным географическим и спроектированным системам координат к файлам GeoTIFF, с помощью geotiffwrite. Теговый формат графических файлов (TIFF) появился в качестве популярного формата, чтобы хранить растровые данные. Спецификация GeoTIFF задает набор тегов TIFF, которые описывают "Картографическую" информацию, сопоставленную с растровыми данными о TIFF. Используя эти теги, определенное геолокацию формирование изображений или растровые сетки с координатами, на которые ссылаются к Географической Системе координат (широта и долгота) или (плоской) Спроектированной Системе координат, могут храниться в файле GeoTIFF.

Настройка: задайте служебную функцию папки и имени файла данных

Этот пример создает несколько временных файлов GeoTIFF и использует переменную datadir, чтобы обозначить их местоположение. Значение, используемое здесь, определяется выводом команды tempdir, но вы могли легко настроить это. Содержимое datadir удалено в конце примера.

datadir = fullfile(tempdir, 'datadir');
if ~exist(datadir, 'dir')
   mkdir(datadir)
end

Задайте анонимную функцию, чтобы предварительно ожидать datadir к входному имени файла:

datafile = @(filename)fullfile(datadir, filename);

Пример 1: запишите изображение, ссылаемое в географические координаты

Запишите изображение, на которое ссылаются в географические координаты WGS84 к файлу GeoTIFF. Оригинальное изображение (boston_ovr.jpg) хранится в формате JPEG, со ссылкой на информацию, внешнюю к файлу изображения, в "мировом файле" (boston_ovr.jgw). Изображение предоставляет с низким разрешением "обзор" Бостона, Массачусетс и окружающего пространства.

Считайте изображение из файла JPEG.

basename = 'boston_ovr';
imagefile = [basename '.jpg'];
RGB = imread(imagefile);

Получите ссылочный объект из мирового файла.

worldfile = getworldfilename(imagefile);
R = worldfileread(worldfile,'geographic',size(RGB));

Запишите изображение в файл GeoTIFF.

filename = datafile([basename '.tif']);
geotiffwrite(filename,RGB,R)

Заметьте, что информация о GeoTIFF из файла указывает, что Географическая система координат (GCS) является "WGS 84" и что все поля (PCS, Проекция, MapSys, Зона, CTProjection, ProjParm, ProjParmId и UOMLength) сопоставленный со спроектированной системой координат пусты.

geotiffinfo(filename)
ans = 

  struct with fields:

             Filename: '/tmp/BR2019ad_1035872_198992/publish_examples0/datadir/boston_ovr.tif'
          FileModDate: '10-Jan-2019 16:56:42'
             FileSize: 1674210
               Format: 'tif'
        FormatVersion: []
               Height: 769
                Width: 722
             BitDepth: 8
            ColorType: 'truecolor'
            ModelType: 'ModelTypeGeographic'
                  PCS: ''
           Projection: ''
               MapSys: ''
                 Zone: []
         CTProjection: ''
             ProjParm: []
           ProjParmId: ''
                  GCS: 'WGS 84'
                Datum: 'World Geodetic System 1984'
            Ellipsoid: 'WGS 84'
            SemiMajor: 6378137
            SemiMinor: 6.3568e+06
                   PM: 'Greenwich'
    PMLongToGreenwich: 0
            UOMLength: ''
    UOMLengthInMeters: []
             UOMAngle: 'degree'
    UOMAngleInDegrees: 1
            TiePoints: [1x1 struct]
           PixelScale: [3x1 double]
           SpatialRef: [1x1 map.rasterref.GeographicCellsReference]
            RefMatrix: [3x2 double]
          BoundingBox: [2x2 double]
         CornerCoords: [1x1 struct]
         GeoTIFFCodes: [1x1 struct]
          GeoTIFFTags: [1x1 struct]

Повторно импортируйте новый файл GeoTIFF и отобразите Бостонское изображение обзора, правильно расположенное, в карте оси.

figure
usamap(R.LatitudeLimits, R.LongitudeLimits)
setm(gca,'PLabelLocation',0.05,'PlabelRound',-2,'PlineLocation',0.05)
geoshow(filename)
title('Boston Overview')

Пример 2: запишите сетку данных, ссылаемую в географические координаты

Запишите сетку данных, на которую ссылаются в географические координаты WGS84 к файлу GeoTIFF.

load topo
Z = topo;
R = georasterref('RasterSize',size(Z), ...
    'LatitudeLimits',[-90 90],'LongitudeLimits',[0 360]);
filename = datafile('topo.tif');
geotiffwrite(filename,Z,R)

Значения в сетке данных колеблются от-7473 до 5 731. Отобразите сетку как сопоставленную со структурой поверхность, а не как изображение интенсивности.

figure
worldmap world
gridm off
setm(gca,'MLabelParallel',-90,'MLabelLocation',90)
h = geoshow(filename,'DisplayType','texturemap');
demcmap(h.CData)
title('Topography Data Grid')

Ключевая концепция: организация данных в файлах GeoTIFF

Одна из важных концепций, чтобы понять при экспортировании данных с geotiffwrite - то, что как пиксели (ячейки сетки) в файле упорядочивают в изображении; столбцы будут всегда запускаться с севера, и строки будут всегда запускаться с запада. Это означает, что значения GeoTIFF ModelPixelScaleTag всегда положительны. От предыдущего примера:

filename = datafile('topo.tif');
info = geotiffinfo(filename);
info.GeoTIFFTags.ModelPixelScaleTag
ans =

     1     1     0

Однако обратите внимание, что входные данные от topo.mat организованы со столбцами, запускающимися с юга:

R.ColumnsStartFrom
ans =

    'south'

Следовательно, данные в файле GeoTIFF, в этом случае, инвертируются по сравнению с входными данными:

[fileZ, fileR] = geotiffread(filename);
isequal(fileZ,flipud(Z))
ans =

  logical

   1

и столбцы запускаются с севера:

R.ColumnsStartFrom
ans =

    'south'

Если вам нужны данные в вашей рабочей области, чтобы соответствовать снова, затем инвертировать значения Z и установить ссылочный объект, таким образом, что столбцы запускаются с юга:

fileR.ColumnsStartFrom = 'south';
fileZ = flipud(fileZ);
isequal(fileZ,Z)
ans =

  logical

   1

Данные в файле GeoTIFF закодированы с положительными значениями шкалы так, чтобы, когда просматривается с обычным просматривающим TIFF программным обеспечением, северное ребро того набора данных было наверху. Если вам абсолютно нужен формат данных в файле, чтобы совпадать с размещением входных данных, можно создать объект Tiff и использовать его, чтобы сбросить ModelPixelScaleTag, ModelTiepointTag, тег Сжатия и данные изображения.

t = Tiff(filename, 'r+');
pixelScale = getTag(t,'ModelPixelScaleTag');
pixelScale(2) = -pixelScale(2);
setTag(t,'ModelPixelScaleTag',pixelScale);
tiepoint = getTag(t,'ModelTiepointTag');
tiepoint(5) = intrinsicToGeographic(R,0.5,0.5);
setTag(t,'ModelTiepointTag',tiepoint);
setTag(t,'Compression', Tiff.Compression.None)
write(t,Z);
rewriteDirectory(t)
close(t)

Можно проверить, что ссылочный объект и сетка данных из файла совпадают с входом в этом случае.

[Z2,R2] = geotiffread(filename);
isequal(Z2,Z)
isequal(R2,R)
ans =

  logical

   1


ans =

  logical

   1

Пример 3: запишите изображение, ссылаемое в спроектированную систему координат

Запишите ортофотографии Согласия в один файл GeoTIFF. Два, смежные (запад на восток), геосослались на полутоновое (панхроматическое) ортофото покрытие часть Конкорда, Массачусетса, США. Файл concord_ortho.txt указывает, что на данные ссылаются на Материк Массачусетса (NAD83) Плоская Спроектированная Система координат состояния. Модули являются метрами. Это соответствует номеру кода GeoTIFF 26986, как отмечено в спецификации GeoTIFF по http://geotiff.maptools.org/spec/geotiff6.html#6.3.3.1 под PCS_NAD83_Massachusetts.

Считайте эти две ортофотографии и объедините изображения.

X_west = imread('concord_ortho_w.tif');
X_east = imread('concord_ortho_e.tif');
X = [X_west X_east];

Используйте их мировые файлы и размеры, чтобы создать ссылочный объект для каждого изображения и создать новое для их комбинации.

R_west = worldfileread('concord_ortho_w.tfw','planar',size(X_west));
R_east = worldfileread('concord_ortho_e.tfw','planar',size(X_east));
R = R_west;
R.XWorldLimits = [R_west.XWorldLimits(1) R_east.XWorldLimits(2)];
R.RasterSize = size(X);

Запишите данные в файл GeoTIFF. Используйте номер кода, 26986, указывая на PCS_NAD83_Massachusetts Спроектированная Система координат.

coordRefSysCode = 26986;
filename = datafile('concord_ortho.tif');
geotiffwrite(filename,X,R,'CoordRefSysCode',coordRefSysCode)

Заметьте, что информация о GeoTIFF из файла указывает, что Географическая система координат (GCS) является "NAD83" и что все поля, сопоставленные со Спроектированной Системой координат, заполнены в соответствующими значениями.

geotiffinfo(filename)
ans = 

  struct with fields:

             Filename: '/tmp/BR2019ad_1035872_198992/publish_examples0/datadir/concord_ortho.tif'
          FileModDate: '10-Jan-2019 16:56:46'
             FileSize: 8068658
               Format: 'tif'
        FormatVersion: []
               Height: 2000
                Width: 4000
             BitDepth: 8
            ColorType: 'grayscale'
            ModelType: 'ModelTypeProjected'
                  PCS: 'NAD83 / Massachusetts Mainland'
           Projection: 'SPCS83 Massachusetts Mainland zone (meters)'
               MapSys: 'STATE_PLANE_83'
                 Zone: 2001
         CTProjection: 'CT_LambertConfConic_2SP'
             ProjParm: [7x1 double]
           ProjParmId: {7x1 cell}
                  GCS: 'NAD83'
                Datum: 'North American Datum 1983'
            Ellipsoid: 'GRS 1980'
            SemiMajor: 6378137
            SemiMinor: 6.3568e+06
                   PM: 'Greenwich'
    PMLongToGreenwich: 0
            UOMLength: 'metre'
    UOMLengthInMeters: 1
             UOMAngle: 'degree'
    UOMAngleInDegrees: 1
            TiePoints: [1x1 struct]
           PixelScale: [3x1 double]
           SpatialRef: [1x1 map.rasterref.MapCellsReference]
            RefMatrix: [3x2 double]
          BoundingBox: [2x2 double]
         CornerCoords: [1x1 struct]
         GeoTIFFCodes: [1x1 struct]
          GeoTIFFTags: [1x1 struct]

Отобразите объединенные ортофотографии Согласия.

figure
mapshow(filename)
title('Combined Orthophotos')
xlabel('MA Mainland State Plane easting, meters')
ylabel('MA Mainland State Plane northing, meters')

Пример 4: запишите кадрированное изображение из файла GeoTIFF

Запишите первые 1 024 столбца и продержитесь 1 024 строки файла GeoTIFF к новому файлу GeoTIFF.

Считайте изображение RGB и информацию о ссылке из файла boston.tif GeoTIFF.

[A,R] = geotiffread('boston.tif');

Создайте кадрированное изображение.

row = [size(A,1)-1024+1 size(A,1)];
col = [1 1024];
subImage = A(row(1):row(2), col(1):col(2), :);

Создайте новый ссылочный объект для кадрированного изображения.

xi = col + [-.5 .5];
yi = row + [-.5 .5];
[xlimits,ylimits] = intrinsicToWorld(R,xi,yi);
subR = R;
subR.RasterSize = size(subImage);
subR.XWorldLimits = sort(xlimits);
subR.YWorldLimits = sort(ylimits);

Запишите кадрированное изображение в файл GeoTIFF. Используйте GeoKeyDirectoryTag из исходного файла GeoTIFF.

info = geotiffinfo('boston.tif');
filename = datafile('boston_subimage.tif');
geotiffwrite(filename,subImage,subR, ...
   'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag)

Отобразите файл GeoTIFF, содержащий кадрированное изображение.

figure
mapshow(filename)
title('Fenway Park - Cropped Image from GeoTIFF File')
xlabel('MA Mainland State Plane easting, survey feet')
ylabel('MA Mainland State Plane northing, survey feet')

Пример 5: запишите данные SDTS DEM, ссылаемые в координаты UTM

Запишите данные о ландшафте SDTS DEM Горы Вашингтон в файл GeoTIFF.

sdtsFilename = '9129CATD.ddf';

Считайте данные SDTS DEM из файла.

[Z, refmat] = sdtsdemread(sdtsFilename);

Преобразуйте матрицу ссылки в растровый объект ссылки карты. Используйте растровую интерпретацию 'регистрации', потому что это - USGS DEM. Это соответствует растровому типу GeoTIFF PixelIsPoint.

R = refmatToMapRasterReference(refmat,size(Z),'postings');

Создайте структуру, чтобы содержать информацию GeoKeyDirectoryTag.

key = struct( ...
    'GTModelTypeGeoKey',[], ...
    'GTRasterTypeGeoKey',[], ...
    'ProjectedCSTypeGeoKey',[]);

Установите тип модели на 1, указав на Спроектированную систему координат (PCS).

key.GTModelTypeGeoKey = 1;

Установите растровый тип на 2, указав на PixelIsPoint (регистрации).

key.GTRasterTypeGeoKey = 2;

Как обозначено функцией sdtsinfo, на данные ссылаются к Universal, поперечной меркаторской (UTM), Зона 19, в североамериканской Данной величине 1 927. Это соответствует номеру кода GeoTIFF 26719, (PCS_NAD27_UTM_zone_19N).

info = sdtsinfo(sdtsFilename);
fprintf([ ...
    'Horizontal Datum: %s\n', ...
    'MapRefSystem:     %s\n', ...
    'ZoneNumber:       %d\n'], ...
    info.HorizontalDatum, info.MapRefSystem, info.ZoneNumber);
Horizontal Datum: North American 1927
MapRefSystem:     UTM
ZoneNumber:       19

Установите спроектированное значение типа системы координат к 26 719.

key.ProjectedCSTypeGeoKey = 26719;

Запишите данные в файл GeoTIFF.

filename = datafile('9129.tif');
geotiffwrite(filename,Z,R,'GeoKeyDirectoryTag',key)

Одним из преимуществ того, чтобы хранить данные DEM в файле GeoTIFF является способность легко создать структуру проекции GeoTIFF из информации в файле. Преобразуйте схему Нью-Гемпшира к UTM использование информации о проекции.

S = shaperead('usastatelo','UseGeoCoords',true,'Selector',...
   {@(name) any(strcmp(name,{'New Hampshire'})),'Name'});
proj = geotiffinfo(filename);
[x,y] = projfwd(proj, [S.Lat], [S.Lon]);

Отобразите файл GeoTIFF DEM и схему Нью-Гэмпшира.

figure
mapshow(x,y)
hold on
h = mapshow(filename,'DisplayType','surface');
demcmap(h.ZData)
title('SDTS DEM')
xlabel('UTM Zone 19 easting, meters')
ylabel('UTM Zone 19 northing, meters')

Пример 6: запишите USGS 24K данные DEM, ссылаемые к координатам UTM

Запишите данные DEM Саут-Сан-Франциско в файл GeoTIFF.

Распакуйте файл данных DEM к папке datadir и считайте все данные из файла.

filenames = gunzip('sanfranciscos.dem.gz', datadir);
demFilename = filenames{1};
[lat,lon,Z,header] = usgs24kdem(demFilename,1);

Как обозначено от структуры заголовка:

fprintf([ ...
    'PlanimetricReferenceSystemCode: %s\n', ...
    'Zone:                           %d\n', ...
    'HorizontalDatum:                %s\n'], ...
    header.PlanimetricReferenceSystemCode, ...
    header.Zone, header.HorizontalDatum);
PlanimetricReferenceSystemCode: UTM
Zone:                           10
HorizontalDatum:                unknown

на данные ссылаются к Universal, поперечной меркаторской (UTM), Зона 10, и горизонтальная данная величина не определена. Мы примем североамериканскую Данную величину 1 927. Данные хранятся в файле в координатах UTM; однако, usgs24kdem функционируют обратные проекты местоположение каждой точки выборки (регистрации), чтобы возвратить определенную геолокацию сетку данных в географических координатах. Спроектируйте координаты широты и долготы назад в UTM.

mstruct = defaultm('utm');
mstruct.geoid = referenceEllipsoid('clarke66','meters');
mstruct.zone = num2str(header.Zone);
mstruct = defaultm(mstruct);
[x,y] = mfwdtran(mstruct,lat,lon);

Создайте ссылочный объект, чтобы связать строки и столбцы сетки данных к UTM. Поскольку данными является USGS DEM, растровая интерпретация является 'регистрациями', и пределы мира X и Y заданы пределами координат UTM.

R = maprasterref( ...
    'RasterSize', size(Z), ...
    'XWorldLimits', [min(x(:)) max(x(:))], ...
    'YWorldLimits', [min(y(:)) max(y(:))], ...
    'ColumnsStartFrom', 'north', ...
    'RasterInterpretation', 'postings');

Создайте структуру, чтобы содержать информацию GeoKeyDirectoryTag.

key = struct( ...
    'GTModelTypeGeoKey',[], ...
    'GTRasterTypeGeoKey',[], ...
    'ProjectedCSTypeGeoKey',[]);

Установите тип модели на 1, указав на Спроектированную систему координат (PCS).

key.GTModelTypeGeoKey = 1;

Установите растровый тип на 2, указав на PixelIsPoint (регистрации).

key.GTRasterTypeGeoKey = 2;

Как отмечено выше, на данные ссылаются к Universal, поперечной меркаторской (UTM), Зона 10, и североамериканская Данная величина 1 927 принята. Это соответствует номеру кода GeoTIFF 26710 (PCS_NAD27_UTM_zone_10N).

key.ProjectedCSTypeGeoKey = 26710;

Запишите файл GeoTIFF.

filename = datafile('sanfrancisos.tif');
geotiffwrite(filename,Z,R,'GeoKeyDirectoryTag',key)

Преобразуйте схему Калифорнии к UTM использование информации о проекции из файла GeoTIFF.

S = shaperead('usastatehi','UseGeoCoords',true,'Selector',...
    {@(name) any(strcmp(name,{'California'})),'Name'});
proj = geotiffinfo(filename);
[x, y] = projfwd(proj, [S.Lat], [S.Lon]);

Считайте повышения и информацию о ссылке из файла.

[Z,R] = geotiffread(filename);

Для просмотра, установленных значений с 0 повышениями к-1.

Z(Z==0) = -1;

Отобразите Саут-Сан-Франциско 24K DEM и схема области Отсека.

figure
mapshow(x,y)
hold on
mapshow(Z,R,'DisplayType','surface')
demcmap(Z)
xlim([ 517911  581619])
ylim([4136580 4200288])
title('San Francisco South 24K DEM')
xlabel('UTM Zone 10 easting, meters')
ylabel('UTM Zone 10 northing, meters')

Пример 7: запишите неданные изображения в файл TIFF

Если вы будете работать с сеткой данных, которая является классом дважды со значениями, которые располагаются вне пределов, требуемых изображения интенсивности с плавающей точкой (0 <= данные <= 1), и если вы будете хранить данные в файле TIFF с помощью imwrite, то данные будут усеченными к интервалу [0,1], масштабируемый и преобразованный в uint8. Очевидно, для некоторых или даже всей информации в исходных данных возможно быть потерянным. Избежать этих проблем и сохранить числовой класс и область значений вашей сетки данных, geotiffwrite использования, чтобы записать данные.

Создайте выборку Z данные.

n = 512;
Z = peaks(n);

Создайте ссылочный объект, чтобы сослаться на строки и столбцы к X и Y.

R = maprasterref('RasterSize',[n n],'ColumnsStartFrom','north');
R.XWorldLimits = R.XIntrinsicLimits;
R.YWorldLimits = R.YIntrinsicLimits;

Создайте структуру, чтобы содержать информацию GeoKeyDirectoryTag. Установите тип модели на 1 Спроектированную систему координат (PCS) указания.

key.GTModelTypeGeoKey = 1;

Установите растровый тип на 1 указание PixelIsArea (ячейки).

key.GTRasterTypeGeoKey = 1;

Укажите на пользовательскую Спроектированную Систему координат при помощи значения 32 767.

key.ProjectedCSTypeGeoKey = 32767;

Запишите данные в файл GeoTIFF с geotiffwrite. Для сравнения запишите второй файл с помощью imwrite.

filename_geotiff = datafile('zdata_geotiff.tif');
filename_tiff = datafile('zdata_tiff.tif');
geotiffwrite(filename_geotiff,Z,R,'GeoKeyDirectoryTag',key)
imwrite(Z, filename_tiff);

Когда вы читаете файл с помощью imread, значения данных и тип класса сохраняются. Вы видите, что значения данных в файле TIFF не сохраняются.

geoZ  = imread(filename_geotiff);
tiffZ = imread(filename_tiff);
fprintf('Class type of Z: %s\n', class(Z))
fprintf('Class type of data in GeoTIFF file: %s\n', class(geoZ))
fprintf('Class type of data in    TIFF file: %s\n', class(tiffZ))
fprintf('Does data in GeoTIFF file equal Z: %d\n', isequal(geoZ, Z))
fprintf('Does data in    TIFF file equal Z: %d\n', isequal(tiffZ, Z))
Class type of Z: double
Class type of data in GeoTIFF file: double
Class type of data in    TIFF file: uint8
Does data in GeoTIFF file equal Z: 1
Does data in    TIFF file equal Z: 0

Можно просмотреть сетку данных с помощью mapshow.

figure
mapshow(filename_geotiff,'DisplayType','texturemap')
title('Peaks - Stored in GeoTIFF File')

Пример 8: измените существующий файл при сохранении метаинформации

Можно хотеть изменить существующий файл, но сохранить больше всего, если не все, метаинформации в TIFF помечают. Этот пример преобразовывает изображение RGB из boston.tif файла в индексируемое изображение и пишет новые данные в индексируемый файл GeoTIFF. Метаинформация TIFF, за исключением значений BitDepth, BitsPerSample, и тегов PhotometricInterpretation, сохраняется.

Считайте изображение из геофайла TIFF boston.tif.

RGB = geotiffread('boston.tif');

Используйте функцию MATLAB, rgb2ind, чтобы преобразовать изображение RGB в индексируемое изображение X с помощью минимального квантования отклонения.

[X,cmap] = rgb2ind(RGB,65536);

Получите данные меток TIFF с помощью imfinfo.

info = imfinfo('boston.tif');

Создайте структуру тегов TIFF, чтобы сохранить выбранную информацию от структуры info.

tags = struct( ...
    'Compression',  info.Compression, ...
    'RowsPerStrip', info.RowsPerStrip, ...
    'XResolution',  info.XResolution, ...
    'YResolution',  info.YResolution, ...
    'ImageDescription', info.ImageDescription, ...
    'DateTime',    info.DateTime, ...
    'Copyright',   info.Copyright, ...
    'Orientation', info.Orientation);

Значения для тегов PlanarConfiguration и ResolutionUnit должны быть числовыми, а не представить в виде строки оцененный, как возвращено imfinfo. Можно установить эти теги при помощи постоянных свойств от класса Tiff. Например, вот являются возможные значения для PlanarConfiguration постоянным свойством:

Tiff.PlanarConfiguration
ans = 

  struct with fields:

      Chunky: 1
    Separate: 2

Используйте значение строки от структуры info, чтобы получить требуемое значение.

tags.PlanarConfiguration = ...
    Tiff.PlanarConfiguration.(info.PlanarConfiguration);

Установите значение ResolutionUnit таким же образом.

tags.ResolutionUnit = Tiff.ResolutionUnit.(info.ResolutionUnit);

Тег программного обеспечения не установлен в файле boston.tif. Однако geotiffwrite установит тег Software по умолчанию. Чтобы сохранить информацию, установите значение к пустой строке, которая препятствует тому, чтобы тег был записан в файл.

tags.Software = '';

Скопируйте GeoTIFF и информацию о ссылке от boston.tif.

geoinfo = geotiffinfo('boston.tif');
key = geoinfo.GeoTIFFTags.GeoKeyDirectoryTag;
R = geoinfo.SpatialRef;

Запишите в файл GeoTIFF.

filename = datafile('boston_indexed.tif');
geotiffwrite(filename,X,cmap,R,'GeoKeyDirectoryTag',key,'TiffTags',tags)

Просмотрите индексируемое изображение.

figure
mapshow(filename)
title('Boston - Indexed Image')
xlabel('MA Mainland State Plane easting, survey feet')
ylabel('MA Mainland State Plane northing, survey feet')

Сравните информацию в структурах, которые должны быть равными путем печати таблицы значений.

info_rgb = imfinfo('boston.tif');
info_indexed = imfinfo(filename);
tagNames = fieldnames(tags);
tagNames(strcmpi('Software', tagNames)) = [];
names = [{'Height' 'Width'}, tagNames'];

spacing = 2;
fieldnameLength = max(cellfun(@length, names)) + spacing;
formatSpec = ['%-' int2str(fieldnameLength) 's'];

fprintf([formatSpec formatSpec formatSpec '\n'], ...
    'Fieldname', 'RGB Information', 'Indexed Information')
fprintf([formatSpec formatSpec formatSpec '\n'], ...
    '---------', '---------------', '-------------------')

for k = 1:length(names)
    fprintf([formatSpec formatSpec formatSpec '\n'], ...
        names{k}, ...
        num2str(info_rgb.(names{k})), ...
        num2str(info_indexed.(names{k})))
end
Fieldname            RGB Information      Indexed Information  
---------            ---------------      -------------------  
Height               2881                 2881                 
Width                4481                 4481                 
Compression          Uncompressed         Uncompressed         
RowsPerStrip         256                  256                  
XResolution          300                  300                  
YResolution          300                  300                  
ImageDescription     "GeoEye"             "GeoEye"             
DateTime             2007:02:23 21:46:13  2007:02:23 21:46:13  
Copyright            "(c) GeoEye"         "(c) GeoEye"         
Orientation          1                    1                    
PlanarConfiguration  Chunky               Chunky               
ResolutionUnit       Inch                 Inch                 

Сравните информацию, которая должна отличаться, поскольку вы преобразовали изображение RGB в индексируемое изображение путем печати таблицы значений.

names = {'FileSize', 'ColorType', 'BitDepth', ...
    'BitsPerSample', 'PhotometricInterpretation'};

fieldnameLength = max(cellfun(@length, names)) + spacing;
formatSpec = ['%-' int2str(fieldnameLength) 's'];
formatSpec2 = '%-17s';

fprintf(['\n' formatSpec formatSpec2 formatSpec2 '\n'], ...
    'Fieldname', 'RGB Information', 'Indexed Information')
fprintf([formatSpec formatSpec2 formatSpec2 '\n'], ...
    '---------', '---------------', '-------------------')
for k = 1:length(names)
    fprintf([formatSpec formatSpec2 formatSpec2 '\n'], ...
        names{k}, ...
        num2str(info_rgb.(names{k})), ...
        num2str(info_indexed.(names{k})))
end
Fieldname                  RGB Information  Indexed Information
---------                  ---------------  -------------------
FileSize                   38729900         27925078         
ColorType                  truecolor        indexed          
BitDepth                   24               16               
BitsPerSample              8  8  8          16               
PhotometricInterpretation  RGB              RGB Palette      

Очистка: удалите папку данных

Удалите временную папку и файлы данных.

rmdir(datadir, 's')

Кредиты

boston.tif, boston_ovr.jpg:

  Copyright GeoEye
  Includes material copyrighted by GeoEye, all rights reserved.
  (GeoEye was merged into the DigitalGlobe corporation January 29th,
  2013.)
  For more information, run:
  >> type boston.txt
  >> type boston_ovr.txt

concord_orthow_w.tif, concord_ortho_e.tif:

  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

9129CATD.ddf (и вспомогательные файлы):

  United States Geological Survey (USGS) 7.5-minute Digital Elevation
  Model (DEM) in Spatial Data Transfer Standard (SDTS) format for the
  Mt. Washington quadrangle, with elevation in meters.
  http://edc.usgs.gov/products/elevation/dem.html
  For more information, run:
  >> type 9129.txt

sanfranciscos.dem.gz:

  United States Geological Survey (USGS) 7.5-minute Digital Elevation
  Model (DEM) for the SAN FRANCISCO SOUTH, CA BIG BASIN DEM quadrangle,
  with elevation in feet.
  For more information, run:
  >> type sanfranciscos.txt

Смотрите также

| | |