2017-12-28 4 views
0

최종 목표는 C++로 클라우드 검색 알고리즘을 구현하는 것입니다. 그러나, 나는 문제에 직면했다.픽셀 정보 추출 (dl) LibTIFF 사용

픽셀에서 정보를 추출하는 데 문제가 있습니다. 데이터 사전 처리의 경우 SNAP이 사용되었으며 특정 픽셀 (경도, 위도, 밴드 값 등)에 대해 많은 정보를 볼 수있었습니다. 나는 TIFF 파일로 이미지를 내보낼 때

Pixel Info in SNAP

문제

가 발생합니다. 이를 처리하기 위해 LibTIFF 라이브러리를 사용했습니다. 그러나 주어진 픽셀에 대한 특정 정보를 추출하는 방법을 알지 못합니다. 현재, LibTIFF 문서에서 표준 코드를 사용하여 이미지의 모든 픽셀을 반복하고 그 값을 출력합니다. 불행히도, 내가 얻는 가치는 말이되지 않습니다.

TIFF* tif = TIFFOpen(filename, "r"); 
if (tif) { 
    uint32 imagelength; 
    double * buf; 
    tsize_t scanline; 
    uint32 row; 
    uint32 i; 
    tsize_t y; 

    TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &imagelength); 
    scanline = TIFFScanlineSize(tif); 
    buf = (double *) _TIFFmalloc(scanline); 
    for (row = 0; row < imagelength; row++) { 
     int n = TIFFReadScanline(tif, buf, row); 

     for (y = 0; y < scanline; y++) { 
      cout << "Row: " << row << " y: " << y << " " << (double) buf[y] 
        << endl; 
     } 
    } 
    _TIFFfree(buf); 
    TIFFClose(tif); 
} 

그래서, 내 질문은 이상적으로 LibTIFF를 사용하여 주어진 픽셀에 대한 특정 정보를 추출 할 수있는 간단한 방법이있다? 그렇지 않다면 어떻게해야할까요? 질문이 매우 기초적이라면 죄송합니다. 단지 그것에 관한 정보를 찾을 수 없었습니다. 미리 감사드립니다.

편집 : 출력 identify -verbose file.tif

Format: TIFF (Tagged Image File Format) 
    Mime type: image/tiff 
    Class: DirectClass 
    Geometry: 1830x1830+0+0 
    Resolution: 1x1 
    Print size: 1830x1830 
    Units: Undefined 
    Colorspace: Gray 
    Type: Grayscale 
    Endianess: MSB 
    Depth: 16/8-bit 
    Channel depth: 
    Gray: 8-bit 
    Channel statistics: 
    Pixels: 3348900 
    Gray: 
     min: 0 (0) 
     max: 13107 (0.2) 
     mean: 1582.66 (0.0241498) 
     standard deviation: 1200.55 (0.0183193) 
     kurtosis: 2.79689 
     skewness: 1.81966 
     entropy: 0.63063 
    Colors: 34 
Rendering intent: Undefined 
    Gamma: 0.454545 
    Matte color: grey74 
    Background color: white 
    Border color: srgb(223,223,223) 
    Transparent color: none 
    Interlace: None 
    Intensity: Undefined 
    Compose: Over 
    Page geometry: 1830x1830+0+0 
    Dispose: Undefined 
    Iterations: 0 
    Compression: None 
    Orientation: TopLeft 
    Properties: 
    comment: band2 
    date:create: 2018-01-09T21:48:10+00:00 
    date:modify: 2018-01-09T21:48:14+00:00 
    signature: b3783beb7f7d2bdb32c3c64f8878a02c238a10f221f6a05f93991b26a58a4c78 
    tiff:alpha: unspecified 
    tiff:endian: msb 
    tiff:photometric: min-is-black 
    tiff:rows-per-strip: 1830 
    Artifacts: 
    verbose: true 
    Tainted: False 
    Filesize: 49.3701MiB 
    Number pixels: 3348900 
    Pixels per second: 3.88504MB 
    User time: 0.484u 
    Elapsed time: 0:01.861 
+0

tiffdump image.tif의 출력이 왜 당신이 당신의 TIFF는 복식을 포함 생각입니까? 'tiffdump yourFile.tif'을 시도 했습니까, 아니면 ** ImageMagick **의'-verbose yourFile.tif'를 확인 했습니까? –

+0

픽셀의 일부 값 (예 : 밴드 값)이 두 배이기 때문에 TIFF에 double 값이 있다고 가정했습니다. 나는 그것이 틀림 없다고 꽤 확신한다. 아니오, 저는 tiffdump 또는 ImageMagick을 사용하지 않았습니다. 내가 제대로 이해한다면 픽셀의 내용을 찾는데 도움이 될 것입니다. 그리고 필요한 부분을 추출하십시오. – Mantas

+0

하나만 실행하거나 두 가지 모두를 수행하고 처리 할 대상을 확인하십시오. 게시물 아래에있는 '편집'을 클릭하고 출력을 붙여 넣으십시오. –

답변

0

의 나는 이것 좀 있었도 혼란 스러워요,하지만 난 대답의 시작으로 내가 알고있는 것을 넣어 어쩌면 경우, 나보다 영리한 사람 (@ fmw42 어쩌면) 무슨 일이 일어나는지 우리에게 말할 수 있습니다.

이미지는 16 비트, 그레이 스케일입니다. 파일의 최대 픽셀 값은 13,107이며, 0-65535의 눈금은 0.2 또는 20 %와 같으며 모든 픽셀 값은 사용 가능한 범위의 20 % 만 사용합니다. 즉 이미지가 상당히 어둡습니다. 여기 히스토그램이다 : 나는 (즉, 사용 libtiff) 프로그램으로 이미지의 단지 첫 번째 행을 보면

enter image description here

, 나는 볼이 열 (165)까지 검은 색은 - 그것은 위성 이미지는 아마도 때문에 지구는 스캔 될 때 그림 안으로 회전합니다.

나는 또한 중, ImageMagick를 사용하여 이미지에서 텍스트로 전체 이미지를 볼 수 있습니다 단지 첫 번째 행 아웃 자르기,

convert image.tif txt: 

또는를 :

convert image.tif -crop 1830x1+0+0 txt: 

을 나는 그렇게 할 때, 또한 첫 번째 주사선의 첫 번째 비 검정색 픽셀이 165에 있지만 그 이후의 픽셀은 libtiff 값과 다릅니다. libtiff 값은 아래의 도면의 왼쪽에 있고 ImageMagick이 값은 오른쪽에있다 : I가 차이가 무엇 보이지

enter image description here

- 그것은 간단한 비율이 아니다.그래서 libtiff (녹색)에 의해 계산 나는 이미지의 첫 번째 주사선을 플로팅 ImageMagick이 (보라색) 같이 : 여기 왼쪽에 확대

enter image description here

- 당신은 둘 다에서 시작 볼 수 있습니다 열 165 :

enter image description here

그리고 여기에서는 우측에 확대 :

enter image description here

더 많은 계단이 있기 때문에 (이미지 밝기의 픽셀 비트 수가 더 적음) 더 낮은 방사형 해상도가있는 것처럼 보이지만 때로는 더 게으른 것처럼 보이고 더 정확한 값을 명확하게 나타낼 수있을 때 완전히 정적 인 것처럼 보입니다 . 여기

image.tif: 
Magic: 0x4d4d <big-endian> Version: 0x2a <ClassicTIFF> 
Directory 0: offset 10 (0xa) next 0 (0) 
ImageWidth (256) LONG (4) 1<1830> 
ImageLength (257) LONG (4) 1<1830> 
BitsPerSample (258) SHORT (3) 1<16> 
Compression (259) SHORT (3) 1<1> 
Photometric (262) SHORT (3) 1<1> 
ImageDescription (270) ASCII (2) 6<band2\0> 
StripOffsets (273) LONG (4) 1<45070554> 
SamplesPerPixel (277) SHORT (3) 1<1> 
RowsPerStrip (278) LONG (4) 1<1830> 
StripByteCounts (279) LONG (4) 1<6697800> 
XResolution (282) RATIONAL (5) 1<1> 
YResolution (283) RATIONAL (5) 1<1> 
PlanarConfig (284) SHORT (3) 1<2> 
ResolutionUnit (296) SHORT (3) 1<1> 
SampleFormat (339) SHORT (3) 1<1> 
34264 (0x85d8) DOUBLE (12) 16<60 0 0 600000 0 -60 0 5.90004e+06 0 0 0 0 0 0 0 1> 
34735 (0x87af) SHORT (3) 24<1 1 2 5 1024 0 1 1 1025 0 1 1 1026 34737 22 0 3072 0 1 32629 3073 34737 22 22> 
34737 (0x87b1) ASCII (2) 45<WGS 84/UTM zone 29N|WG ...> 
65000 (0xfde8) ASCII (2) 45070067<<?xml version="1.0" enco ...> 
+0

@emcconville 잠깐 이걸 좀 보시 겠어요? –