문제

작은 C 프로그램을 사용하여 16 비트 Greyscale Tiff 파일 (bitspersample = 16)을 읽어 추가 분석을 위해 부동 소수점 번호 배열로 변환하려고합니다. 픽셀 데이터는 헤더 정보에 따르면 2048x2048 픽셀의 단일 스트립입니다. 인코딩은 리틀 엔디언입니다.
그 헤더 정보를 사용하여, 나는 2048x2048x2 바이트의 단일 블록을 읽고 2048x2048 2-byte 정수로 해석 할 수있을 것으로 기대했다. 실제로 내가 얻는 것은 그림입니다 4 개의 사분면으로 나뉩니다 각각 1024x1024 픽셀 중, 그 중 2 개는 0 만 포함합니다. 상단 두 사분면 각각은 전체 그림이 보이기를 기대했던 것처럼 보입니다. Alt Text http://users.aber.ac.uk/ruw/unlinked/15_inrt_0p457.png
내가 읽으면 김프에 동일한 파일 또는 Imagemagick, 둘 다 그들이 8 비트로 줄여야한다고 말해서 (도움이되지 않아 - 전체 범위가 필요합니다) 픽셀은 올바른 장소에서 나타납니다. 대체 텍스트 http://users.aber.ac.uk/ruw/unlinked/15_inrt_0p457_gimp.png이것은 하나의 스트립 내에서 데이터가 어떻게 배열되는지에 대한 나의 생각이 잘못되었음을 시사합니다. 반면에, 파일은 헤더 정보 측면에서 올바르게 형식화되어야합니다. 내가 어디로 잘못 가고 있습니까?

Tiffdump의 출력 :
15_inrt_0p457.tiff :
마술 : 0x4949 버전 : 0x2a
디렉토리 0 : 오프셋 8 (0x8) 다음 0 (0)
imagewidth (256) Long (4) 1 <2048>
ImageLength (257) Long (4) 1 <2048>
bitspersample (258) Short (3) 1 <16>
압축 (259) 짧은 (3) 1 <1>
광도 (262) 짧은 (3) 1 <1>
Stripoffsets (273) Long (4) 1 <4096>
방향 (274) 짧은 (3) 1 <1>
Rowsperstrip (278) Long (4) 1 <2048>
Stripbytecounts (279) Long (4) 1 <8388608>
Xresolution (282) 합리적 (5) 1 <126.582>
Yresolution (283) 합리적 (5) 1 <126.582>
Resolutionunit (296) 짧은 (3) 1 <3>
34710 (0x8796) Long (4) 1 <0>
(태그 34710은 카메라 정보입니다. 이것이 어떻게 든 차이를 만들지 않도록하기 위해 이미지 파일 디렉토리의 끝에서 0x1000의 데이터 시작에 이르기까지 전체 범위를 제로화했으며 실제로는 만들지 않습니다. 모든 차이.)

도움이 되었습니까?

해결책

문제를 발견했습니다. C 프로그램에있었습니다 ...

나는 많은 시간 배열에 대한 메모리를 할당하고 fread ()를 사용하여 데이터를 읽었습니다.

#define PPR 2048;
#define BPP 2;
long *pix;
pix=malloc(PPR*PPR*sizeof(long));
fread(pix,BPP,PPR*PPR,in);

그러나 데이터는 2 바이트 청크 (bpp = 2)이지만 (long) = 4의 크기로 나오기 때문에 fread ()는 할당 된 메모리 내부의 데이터를 긴 크기의 소포로 포장하지 않고 밀도로 포장합니다. 따라서 나는 두 개의 행이 하나로 묶여 있고 그림의 후반부는 비어 있습니다.

나는 그것을 픽셀 수를 루프하도록 변경하고 매번 두 바이트를 읽고 대신 할당 된 메모리에 저장했습니다.

for (m=0;m<PPR*PPR;m++) {
  b1=fgetc(in);
  b2=fgetc(in);
  *(pix+m)=256*b1+b2;
}

다른 팁

Stripoffsets가 배열 인 경우 오프셋 배열의 오프셋이라는 것을 이해합니다. 당신은 그 불일치를 제대로하지 않을 수 있습니다.

당신의 플랫폼은 무엇입니까? 당신은 무엇을하려고합니까? Windows의 .NET에서 기꺼이 일할 의향이 있다면 우리 회사는 이미지 처리 툴킷을 판매합니다 여기에는 당신이 던질 수있는 거의 모든 것에서 작동하고 16 개의 BPP 이미지를 반환하는 TIFF 코덱이 포함됩니다. 또한 16BPP 이미지에서 기본적으로 작동하는 많은 도구가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top