GDAL Warp - ошибка с 16бит

wowka1319
Участник
Сообщения: 93
Зарегистрирован: 04 дек 2013, 02:14
Репутация: 1

GDAL Warp - ошибка с 16бит

Сообщение wowka1319 » 13 фев 2014, 19:48

код:

Код: Выделить всё

#include <iostream>
#include "gdal_priv.h"
#include "cpl_conv.h" // for CPLMalloc()
#include "gdalwarper.h"
#include "ogr_spatialref.h"

using namespace std;

int main()
{
const char * src_filename = "./xxxx.tiff";
const char * dst_filename = "./xxxx_OUT.tiff";

CPLSetConfigOption( "CPL_LOG", "./log.txt" );
CPLSetConfigOption( "CPL_LOG_ERRORS", "ON" );
CPLSetConfigOption( "GDAL_DATA", "C:/gdal/gdal-data" );

// Open input and output files.
GDALAllRegister();
GDALDriver* hDriver;
GDALDataType eDT;
GDALDataset* hDstDS;
GDALDataset* hSrcDS;

// Open the source file.
hSrcDS = (GDALDataset*) GDALOpen( src_filename, GA_ReadOnly );
CPLAssert( hSrcDS != NULL );

// Create output with same datatype as first input band.
eDT = hSrcDS->GetRasterBand(1)->GetRasterDataType();

// Get output driver (GeoTIFF format)
hDriver = (GDALDriver*) GDALGetDriverByName( "GTiff" );
CPLAssert( hDriver != NULL );

// Get Source coordinate system.
char *pszDstWKT = NULL;
const char * pszSrcWKT = hSrcDS->GetProjectionRef();
CPLAssert( pszSrcWKT != NULL && strlen(pszSrcWKT) > 0 );

// Setup output coordinate system that is UTM 54 WGS84.
OGRSpatialReference oSRS;
oSRS.SetUTM( 54, TRUE );
oSRS.SetWellKnownGeogCS( "WGS84" );
oSRS.exportToWkt( &pszDstWKT );

// Create a transformer that maps from source pixel/line coordinates
// to destination georeferenced coordinates (not destination
// pixel line). We do that by omitting the destination dataset
// handle (setting it to NULL).

void *hTransformArg = GDALCreateGenImgProjTransformer( hSrcDS, pszSrcWKT, NULL, pszDstWKT, FALSE, 0, 1 );
CPLAssert( hTransformArg != NULL );

// Get approximate output georeferenced bounds and resolution for file.
double adfDstGeoTransform[6];
int nPixels=0, nLines=0;
CPLErr eErr = GDALSuggestedWarpOutput( hSrcDS, GDALGenImgProjTransform, hTransformArg, adfDstGeoTransform, &nPixels, &nLines );
CPLAssert( eErr == CE_None );
GDALDestroyGenImgProjTransformer( hTransformArg );

// Create the output file.
hDstDS = (GDALDataset*) GDALCreate( hDriver, dst_filename, nPixels, nLines, hSrcDS->GetRasterCount(), eDT, NULL );

/* OUTS */
CPLAssert( hDstDS != NULL );

// Write out the projection definition.
GDALSetProjection( hDstDS, pszDstWKT );
GDALSetGeoTransform( hDstDS, adfDstGeoTransform );

// Copy the color table, if required.
GDALColorTableH hCT[3];
hCT[0] = GDALGetRasterColorTable( hSrcDS->GetRasterBand(1) );
hCT[1] = GDALGetRasterColorTable( hSrcDS->GetRasterBand(2) );
hCT[2] = GDALGetRasterColorTable( hSrcDS->GetRasterBand(3) );
if( hCT[0] != NULL )
{
GDALSetRasterColorTable( hDstDS->GetRasterBand(1), hCT[0] );
GDALSetRasterColorTable( hDstDS->GetRasterBand(2), hCT[1] );
GDALSetRasterColorTable( hDstDS->GetRasterBand(3), hCT[2] );
}

// Setup warp options.
GDALWarpOptions *psWarpOptions = GDALCreateWarpOptions();
psWarpOptions->hSrcDS = hSrcDS;
psWarpOptions->hDstDS = hDstDS;
psWarpOptions->eWorkingDataType = eDT;
psWarpOptions->eResampleAlg = GRA_Cubic;
psWarpOptions->nBandCount = hSrcDS->GetRasterCount();
psWarpOptions->panSrcBands = (int *) CPLMalloc(sizeof(int) * psWarpOptions->nBandCount );
psWarpOptions->panDstBands = (int *) CPLMalloc(sizeof(int) * psWarpOptions->nBandCount );
for(int i = 0; i < psWarpOptions->nBandCount; ++i)
{
psWarpOptions->panSrcBands = i+1;
psWarpOptions->panDstBands = i+1;
}
psWarpOptions->pfnProgress = GDALTermProgress;

// Establish reprojection transformer.
psWarpOptions->pTransformerArg = GDALCreateGenImgProjTransformer( hSrcDS,
GDALGetProjectionRef(hSrcDS),
hDstDS,
GDALGetProjectionRef(hDstDS),
FALSE, 0.0, 1 );
psWarpOptions->pfnTransformer = GDALGenImgProjTransform;

// Initialize and execute the warp operation.
GDALWarpOperation oOperation;
oOperation.Initialize( psWarpOptions );
oOperation.ChunkAndWarpImage(0, 0, GDALGetRasterXSize( hDstDS ), GDALGetRasterYSize( hDstDS ) );

// End
GDALDestroyGenImgProjTransformer( psWarpOptions->pTransformerArg );
GDALDestroyWarpOptions( psWarpOptions );
GDALClose( hDstDS );
GDALClose( hSrcDS );

return 0;
}


Отлично работает с 8-битными геотифами, но при 16-битном выдает на выходе 16-битноке (как и нужно) но чернобелое одноканальное-изображение (т.е. RGB8 -> Gray16).
Пробовал воспользоваться утилитой gdalwarp - итог тот же: при работе с 16-битным геотифам (либо с параметром "-ot UInt16") выдает одноканал.
В чем дело? как это исправить?

gamm
Гуру
Сообщения: 4064
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1061
Ваше звание: программист
Откуда: Казань

Re: GDAL Warp - ошибка с 16бит

Сообщение gamm » 13 фев 2014, 20:02

а hSrcDS->GetRasterCount() (и hDstDS->GetRasterCount() после создания) что выдает? и какой из 3 входных каналов попадает на выход?

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: GDAL Warp - ошибка с 16бит

Сообщение Дмитрий Барышников » 13 фев 2014, 20:29

Приведите целиком команду gdalwarp со всеми ключами, которая приводит к такому эффекту.

[ Сообщение с мобильного устройства ]

wowka1319
Участник
Сообщения: 93
Зарегистрирован: 04 дек 2013, 02:14
Репутация: 1

Re: GDAL Warp - ошибка с 16бит

Сообщение wowka1319 » 13 фев 2014, 21:53

2gamm: hSrcDS->GetRasterCount() == hDstDS->GetRasterCount() == 3. На выход попадает Red (т.е. первый канал).

2Дмитрий Барышников: это неважно с какими ключами запускается gdalwarp, главное это 16 бит. Для примера (проверены):
gdalwarp -ot UInt16 Map_8bit.tiff Map_16.tiff -т.е. искусственно полученный 16бит
gdalwarp -t_srs EPSG:32654 -r cubic Map_16bit.tiff Map_16bit -т.е изначально был 16 бит + перепроецирование + ресемплинг


а вот так все нормально:
gdalwarp -t_srs EPSG:32654 -r cubic Map_8bit.tiff Map_8bit
и через код выше все отлично отрабатывает

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: GDAL Warp - ошибка с 16бит

Сообщение Дмитрий Барышников » 13 фев 2014, 23:28

Ошибка не воспроизводится.
Исходный файл:

Код: Выделить всё

>gdalinfo d:\temp\geoeye_cut_16_bit1.tif
Driver: GTiff/GeoTIFF
Files: d:\temp\geoeye_cut_16_bit1.tif
       d:\temp\geoeye_cut_16_bit1.tif.ovr
       d:\temp\geoeye_cut_16_bit1.tfw
       d:\temp\geoeye_cut_16_bit1.tif.aux.xml
Size is 1837, 1414
Coordinate System is:
PROJCS["WGS_1984_UTM_Zone_37N",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
            SPHEROID["WGS 84",6378137,298.257223563,
                AUTHORITY["EPSG","7030"]],
            AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",39],
    PARAMETER["scale_factor",0.9996],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",0],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]],
    AUTHORITY["EPSG","32637"]]
Origin = (412441.467748815190000,6177092.911279626200000)
Pixel Size = (0.399999999999994,-0.399999999999737)
Metadata:
  AREA_OR_POINT=Area
  DataType=Generic
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  (  412441.468, 6177092.911) ( 37d36'20.48"E, 55d43'53.90"N)
Lower Left  (  412441.468, 6176527.311) ( 37d36'21.14"E, 55d43'35.61"N)
Upper Right (  413176.268, 6177092.911) ( 37d37' 2.59"E, 55d43'54.38"N)
Lower Right (  413176.268, 6176527.311) ( 37d37' 3.24"E, 55d43'36.09"N)
Center      (  412808.868, 6176810.111) ( 37d36'41.86"E, 55d43'44.99"N)
Band 1 Block=128x128 Type=UInt16, ColorInterp=Gray
  NoData Value=0
  Overviews: 919x707, 460x354, 230x177
Band 2 Block=128x128 Type=UInt16, ColorInterp=Undefined
  NoData Value=0
  Overviews: 919x707, 460x354, 230x177
Band 3 Block=128x128 Type=UInt16, ColorInterp=Undefined
  NoData Value=0
  Overviews: 919x707, 460x354, 230x177                                                                    ↑
Команда:
>gdalwarp.exe -t_srs WGS84 -overwrite d:\temp\geoeye_cut_16_bit1.tif

Результат:

Код: Выделить всё

>gdalinfo d:\temp\warp16bit.tif
Driver: GTiff/GeoTIFF
Files: d:\temp\warp16bit.tif
       d:\temp\warp16bit.tif.ovr
       d:\temp\warp16bit.tif.aux.xml
Size is 2140, 939
Coordinate System is:
GEOGCS["WGS 84",
    DATUM["WGS_1984",
        SPHEROID["WGS 84",6378137,298.257223563,
            AUTHORITY["EPSG","7030"]],
        AUTHORITY["EPSG","6326"]],
    PRIMEM["Greenwich",0],
    UNIT["degree",0.0174532925199433],
    AUTHORITY["EPSG","4326"]]
Origin = (37.605689851621349,55.731771290779477)
Pixel Size = (0.000005550274677,-0.000005550274677)
Metadata:
  AREA_OR_POINT=Area
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  (  37.6056899,  55.7317713) ( 37d36'20.48"E, 55d43'54.38"N)
Lower Left  (  37.6056899,  55.7265596) ( 37d36'20.48"E, 55d43'35.61"N)
Upper Right (  37.6175674,  55.7317713) ( 37d37' 3.24"E, 55d43'54.38"N)
Lower Right (  37.6175674,  55.7265596) ( 37d37' 3.24"E, 55d43'35.61"N)
Center      (  37.6116286,  55.7291654) ( 37d36'41.86"E, 55d43'45.00"N)
Band 1 Block=2140x1 Type=UInt16, ColorInterp=Gray
  Overviews: 1070x470, 535x235, 268x118
Band 2 Block=2140x1 Type=UInt16, ColorInterp=Undefined
  Overviews: 1070x470, 535x235, 268x118
Band 3 Block=2140x1 Type=UInt16, ColorInterp=Undefined
  Overviews: 1070x470, 535x235, 268x118
Проверял на:

Код: Выделить всё

>gdalinfo --version
GDAL 1.9.2, released 2012/10/08
и

Код: Выделить всё

>gdalinfo --version
GDAL 1.11dev, released 2013/04/13
Начиная с 10-й версии можно указать параметр -setci для переноса ColorInterpret

wowka1319
Участник
Сообщения: 93
Зарегистрирован: 04 дек 2013, 02:14
Репутация: 1

Re: GDAL Warp - ошибка с 16бит

Сообщение wowka1319 » 14 фев 2014, 15:27

да нет же! вот выкладываю файлы:
lakes_8bit.tiff - 8-битный геотиф. Запускаю: gdalwarp -ot UInt16 lakes_8bit.tiff lakes_16bit.tiff
TEST_16bit.tiff - 16-битный геотиф. Запускаю gdalwarp -t_srs EPSG:32654 TEST_16bit.tiff newTEST_16bit.tiff
в обоих случаях получаю 16битное одноканальное изображение. проверял на разных версиях.
Попробуй у себя - может тогда что-то прояснится, ничего не понимаю...
Вложения
lakes_8bit___and___TEST_16bit.part3.rar
(6.29 МБ) 384 скачивания
lakes_8bit___and___TEST_16bit.part2.rar
(9.54 МБ) 367 скачиваний
lakes_8bit___and___TEST_16bit.part1.rar
(9.54 МБ) 361 скачивание

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: GDAL Warp - ошибка с 16бит

Сообщение Дмитрий Барышников » 15 фев 2014, 23:06

gdalinfo d:\temp\o\lakes_8bit.tiff
Driver: GTiff/GeoTIFF
Files: d:\temp\o\lakes_8bit.tiff
Size is 1213, 707
Coordinate System is:
PROJCS["WGS 84 / Pseudo-Mercator",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433],
AUTHORITY["EPSG","4326"]],
PROJECTION["Mercator_1SP"],
PARAMETER["central_meridian",0],
PARAMETER["scale_factor",1],
PARAMETER["false_easting",0],
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs"],
AUTHORITY["EPSG","3857"]]
Origin = (12474714.108710080000000,6921755.096363360100000)
Pixel Size = (305.968665159630520,-305.964342357884850)
Metadata:
AREA_OR_POINT=Area
Image Structure Metadata:
INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left (12474714.109, 6921755.096) (112d 3'44.15"E, 52d40' 3.50"N)
Lower Left (12474714.109, 6705438.306) (112d 3'44.15"E, 51d28'23.73"N)
Upper Right (12845854.100, 6921755.096) (115d23'46.57"E, 52d40' 3.50"N)
Lower Right (12845854.100, 6705438.306) (115d23'46.57"E, 51d28'23.73"N)
Center (12660284.104, 6813596.701) (113d43'45.36"E, 52d 4'27.99"N)
Band 1 Block=1213x2 Type=Byte, ColorInterp=Red
Band 2 Block=1213x2 Type=Byte, ColorInterp=Green
Band 3 Block=1213x2 Type=Byte, ColorInterp=Blue
gdalwarp -ot UInt16 d:\temp\o\lakes_8bit.tiff d:\temp\o\lakes_16bit.tiff
gdalinfo d:\temp\o\lakes_16bit.tiff
Driver: GTiff/GeoTIFF
Files: d:\temp\o\lakes_16bit.tiff
Size is 1213, 707
Coordinate System is:
PROJCS["WGS 84 / Pseudo-Mercator",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433],
AUTHORITY["EPSG","4326"]],
PROJECTION["Mercator_1SP"],
PARAMETER["central_meridian",0],
PARAMETER["scale_factor",1],
PARAMETER["false_easting",0],
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs"],
AUTHORITY["EPSG","3857"]]
Origin = (12474714.108710080000000,6921755.096363360100000)
Pixel Size = (305.967569016668960,-305.967569016668960)
Metadata:
AREA_OR_POINT=Area
Image Structure Metadata:
INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left (12474714.109, 6921755.096) (112d 3'44.15"E, 52d40' 3.50"N)
Lower Left (12474714.109, 6705436.025) (112d 3'44.15"E, 51d28'23.68"N)
Upper Right (12845852.770, 6921755.096) (115d23'46.53"E, 52d40' 3.50"N)
Lower Right (12845852.770, 6705436.025) (115d23'46.53"E, 51d28'23.68"N)
Center (12660283.439, 6813595.561) (113d43'45.34"E, 52d 4'27.97"N)
Band 1 Block=1213x1 Type=UInt16, ColorInterp=Gray
Band 2 Block=1213x1 Type=UInt16, ColorInterp=Undefined
Band 3 Block=1213x1 Type=UInt16, ColorInterp=Undefined
gdalwarp -overwrite -ot UInt16 d:\temp\o\lakes_8bit.tiff d:\temp\o\lakes_16bit.tiff -setci
gdalinfo d:\temp\o\lakes_16bit.tiff
Driver: GTiff/GeoTIFF
Files: d:\temp\o\lakes_16bit.tiff
Size is 1213, 707
Coordinate System is:
PROJCS["WGS 84 / Pseudo-Mercator",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433],
AUTHORITY["EPSG","4326"]],
PROJECTION["Mercator_1SP"],
PARAMETER["central_meridian",0],
PARAMETER["scale_factor",1],
PARAMETER["false_easting",0],
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs"],
AUTHORITY["EPSG","3857"]]
Origin = (12474714.108710080000000,6921755.096363360100000)
Pixel Size = (305.967569016668960,-305.967569016668960)
Metadata:
AREA_OR_POINT=Area
Image Structure Metadata:
INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left (12474714.109, 6921755.096) (112d 3'44.15"E, 52d40' 3.50"N)
Lower Left (12474714.109, 6705436.025) (112d 3'44.15"E, 51d28'23.68"N)
Upper Right (12845852.770, 6921755.096) (115d23'46.53"E, 52d40' 3.50"N)
Lower Right (12845852.770, 6705436.025) (115d23'46.53"E, 51d28'23.68"N)
Center (12660283.439, 6813595.561) (113d43'45.34"E, 52d 4'27.97"N)
Band 1 Block=1213x1 Type=UInt16, ColorInterp=Red
Band 2 Block=1213x1 Type=UInt16, ColorInterp=Green
Band 3 Block=1213x1 Type=UInt16, ColorInterp=Blue
gdalinfo d:\temp\o\TEST_16bit.tiff
Driver: GTiff/GeoTIFF
Files: d:\temp\o\TEST_16bit.tiff
Size is 4483, 2494
Coordinate System is:
PROJCS[,
GEOGCS["Pulkovo 1942",
DATUM["Pulkovo_1942",
SPHEROID["Krassowsky 1940",6378245,298.2999999999985,
AUTHORITY["EPSG","7024"]],
AUTHORITY["EPSG","6284"]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433],
AUTHORITY["EPSG","4284"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",111],
PARAMETER["scale_factor",1],
PARAMETER["false_easting",0],
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]]]
Origin = (73671.999948490688000,5838215.177363829700000)
Pixel Size = (50.000000000000057,-50.040096230954290)
Metadata:
AREA_OR_POINT=Area
Image Structure Metadata:
INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left ( 73672.000, 5838215.177) (112d 5'20.30"E, 52d40' 0.97"N)
Lower Left ( 73672.000, 5713415.177) (112d 3'43.17"E, 51d32'43.98"N)
Upper Right ( 297822.000, 5838215.177) (115d23'44.13"E, 52d35'25.17"N)
Lower Right ( 297822.000, 5713415.177) (115d17'13.46"E, 51d28'19.01"N)
Center ( 185747.000, 5775815.177) (113d42'34.71"E, 52d 4'48.09"N)
Band 1 Block=4483x1 Type=UInt16, ColorInterp=Red
Band 2 Block=4483x1 Type=UInt16, ColorInterp=Green
Band 3 Block=4483x1 Type=UInt16, ColorInterp=Blue
gdalwarp -t_srs EPSG:32654 d:\temp\o\TEST_16bit.tiff d:\temp\o\newTEST_16bit.tiff
gdalinfo d:\temp\o\newTEST_16bit.tiff
Driver: GTiff/GeoTIFF
Files: d:\temp\o\newTEST_16bit.tiff
Size is 5112, 4118
Coordinate System is:
PROJCS["WGS 84 / UTM zone 54N",
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433],
AUTHORITY["EPSG","4326"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",141],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
AUTHORITY["EPSG","32654"]]
Origin = (-1483809.249623291700000,6237206.318968236400000)
Pixel Size = (52.080716389563065,-52.080716389563065)
Metadata:
AREA_OR_POINT=Area
Image Structure Metadata:
INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left (-1483809.250, 6237206.319) (111d24'39.23"E, 52d28'49.67"N)
Lower Left (-1483809.250, 6022737.929) (112d35' 0.78"E, 50d47'37.30"N)
Upper Right (-1217572.627, 6237206.319) (114d54' 0.80"E, 53d22'19.34"N)
Lower Right (-1217572.627, 6022737.929) (115d58'49.10"E, 51d37'57.38"N)
Center (-1350690.939, 6129972.124) (113d42'34.45"E, 52d 4'59.47"N)
Band 1 Block=5112x1 Type=UInt16, ColorInterp=Gray
Band 2 Block=5112x1 Type=UInt16, ColorInterp=Undefined
Band 3 Block=5112x1 Type=UInt16, ColorInterp=Undefined
В общем даже на ваших данных не воспроизводится - всегда 3 канала
Band 1, Band2 и Band3

wowka1319
Участник
Сообщения: 93
Зарегистрирован: 04 дек 2013, 02:14
Репутация: 1

Re: GDAL Warp - ошибка с 16бит

Сообщение wowka1319 » 16 фев 2014, 01:00

Посмотри на Band's входного и выходного файла:
in:
Band 1 Block=4483x1 Type=UInt16, ColorInterp=Red
Band 2 Block=4483x1 Type=UInt16, ColorInterp=Green
Band 3 Block=4483x1 Type=UInt16, ColorInterp=Blue

out:
Band 1 Block=5112x1 Type=UInt16, ColorInterp=Gray
Band 2 Block=5112x1 Type=UInt16, ColorInterp=Undefined
Band 3 Block=5112x1 Type=UInt16, ColorInterp=Undefined

И правда gdalinfo показывает 3 канала, но это фэйк. Это видно и из gdalinfo и из любой программы, открывающей GeoTiff. Почему ты упорно не хочешь открыть выходные файлы в какой-нибудь программе, которая визуально покажет истину? Вот ты получил выходные файлы - проверь их в том же фотошопе или любой друго программе. Кстати помимо визуального контроля программный подтверждает мои слова. Так что проблема осталась.

gamm
Гуру
Сообщения: 4064
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1061
Ваше звание: программист
Откуда: Казань

Re: GDAL Warp - ошибка с 16бит

Сообщение gamm » 16 фев 2014, 05:52

wowka1319 писал(а):И правда gdalinfo показывает 3 канала, но это фэйк.
это не фейк, просто вы упорно путаете картинку и данные. Данные там есть, что показывает gdal_info и прилагаемая картинка из Сканекса. А то, что какая-то ваша программа не может показать эти данные как RGB, то это проблемы ваши и вашей программы (кстати, в QGIS тоже все нормально, картинка тоже прилагается). И в любой другой программе для обработки данных тоже все будет нормально.
SCANEX-test-8-16.jpg
SCANEX-test-8-16.jpg (887.27 КБ) 11958 просмотров
QGIS-test-8-16.jpg
QGIS-test-8-16.jpg (530.56 КБ) 11958 просмотров

Sergey Astakhov
Активный участник
Сообщения: 218
Зарегистрирован: 21 дек 2012, 01:57
Репутация: 52
Откуда: Питер

Re: GDAL Warp - ошибка с 16бит

Сообщение Sergey Astakhov » 16 фев 2014, 11:33

gamm писал(а):А то, что какая-то ваша программа не может показать эти данные как RGB, то это проблемы ваши и вашей программы (кстати, в QGIS тоже все нормально, картинка тоже прилагается).
Скорей всего те, кто плюют на значения ColorInterp, те и показывают нормально. А кто учитывает - те показывают ч/б
В общем, надо проверить на версии >= 1.10 с ключиком -setci - если поможет, значит дело в этом.

gamm
Гуру
Сообщения: 4064
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1061
Ваше звание: программист
Откуда: Казань

Re: GDAL Warp - ошибка с 16бит

Сообщение gamm » 16 фев 2014, 11:47

Sergey Astakhov писал(а):Скорей всего те, кто плюют на значения ColorInterp, те и показывают нормально. А кто учитывает - те показывают ч/б
еще раз - не нужно путать картинки и данные. Для снимков синтез делается (если вообще делается) в программе, сочетание каналов выбирается в соответствии с задачей. Для желающих посмотреть картинки к данным (снимкам) прикладывается jpeg.

Sergey Astakhov
Активный участник
Сообщения: 218
Зарегистрирован: 21 дек 2012, 01:57
Репутация: 52
Откуда: Питер

Re: GDAL Warp - ошибка с 16бит

Сообщение Sergey Astakhov » 16 фев 2014, 22:34

gamm писал(а):еще раз - не нужно путать картинки и данные
Ещё раз - кроме данных есть и метаданные, которые говорят о том, как следует эти данные интерпретировать. Кто-то может их игнорировать, но это не делает такие программы более "правильными" и не говорит о том, что ошибка в задании метаданных не есть ошибка.

gamm
Гуру
Сообщения: 4064
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1061
Ваше звание: программист
Откуда: Казань

Re: GDAL Warp - ошибка с 16бит

Сообщение gamm » 17 фев 2014, 05:11

Sergey Astakhov писал(а):Ещё раз - кроме данных есть и метаданные
метаданные и тэги для фотошопа - немного разные вещи, ИМХО. Хотя я понимаю, что у нас в стране космоснимки в фотошопе обрабатывают, а ГИС в Corel пишут ... если очень нужно, чтобы gdal обрабатывал/создавал теги для фотошопа, в командной строке есть для этого ключики (исходно речь шла о том, что отсутствуют данные каналов).

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: GDAL Warp - ошибка с 16бит

Сообщение ericsson » 17 фев 2014, 07:12

Между прочим, есть похожий ticket: https://trac.osgeo.org/gdal/ticket/4462
Интересно, если сделать дамп через listgeo, отредактировать его вручную и вернуть через geotifcp - топикстартеру это поможет?

wowka1319
Участник
Сообщения: 93
Зарегистрирован: 04 дек 2013, 02:14
Репутация: 1

Re: GDAL Warp - ошибка с 16бит

Сообщение wowka1319 » 17 фев 2014, 12:32

Добавил "-setci":
gdalwarp -t_srs EPSG:32654 -setci TEST_01.tiff TEST_01_setci.tiff
но почему-то он не сработал:
gdalinfo TEST_01_setci.tiff
...
Band 1 Block=5112x1 Type=UInt16, ColorInterp=Gray
Band 2 Block=5112x1 Type=UInt16, ColorInterp=Undefined
Band 3 Block=5112x1 Type=UInt16, ColorInterp=Undefined

пробовал и так: gdalwarp -overwrite -ot UInt16 lakes_8bit.tiff lakes_16bit.tiff -setci
- и опять вместо Red/Green/Blue - Gray/Undefined/Undefined

Прошу Дмитрия Барышникова сбросить мне результирующие файлы полученные из моих с ключом -setci.

Ответить

Вернуться в «GDAL/OGR»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость