꾸로네

[GNU Octave] 16비트 Tiff 그림파일 읽어오기 본문

연구자료

[GNU Octave] 16비트 Tiff 그림파일 읽어오기

(gguro) 2012. 5. 2. 11:29



[GNU Octave] 16비트 Tiff 그림파일 읽어오기


오랜만에 GNU Octave에 대한 글이구나.


요즘 하는 실험에서 16비트 Tiff 그림파일을 사용한다. 8비트는 0에서 255까지의 값을 사용하는데, 16비트는 0에서 65535까지의 값을 사용하니 좀 더 많은 정보를 그림파일에 담을 수 있다. 이 16비트 그림파일을 어떻게 처리해야할 지 생각하다가 옥타브에서 처리할 수 있지 않을까 하는 생각에 시도를 해보았다. 


일반적으로 그림파일을 읽을 때에는 imread라는 함수를 사용하면 된다. .bmp를 비롯한 다양한 형식을 지원한다. 그런데 이걸 써서 16비트 Tiff 그림파일을 읽으려니 잘 읽어지지 않았다. 그래서 구글에 물어보니 사람들이 고민을 좀 했던 흔적을 발견했다. (흔적 보기)


그래서 결론은 tiffread라는 새로운 함수를 어떤 훌륭한 사람이 만들었다는 내용이다. 누가 만들었는지 찾아보니 유럽의 어느 분자생물학하는 연구실이 나왔다. 아마 좋은 연구를 하는 아름다운 사람들일 거야. 그 홈페이지에 보면 tiffread.m 파일을 받을 수 있는 곳이 연결되어 있다. (파일 받기: http://www.cytosim.org/misc/index.html)


tiffread.m


거기에 보면 여러 판이 있는데, 가장 최근 판인 v3.0.1은 GNU Octave에서 잘 안 되었다. 아마도 Matlab에서 잘 작동하는 것을 확인하고 GNU Octave 호환을 확인 안 한 것이 아닌가 하는 생각도 든다. 그래서 v2.9인 tiffread29.m를 받았다.


# 사용법

1. tiffread29.m 을 받아서 파일이름을 tiffread.m으로 바꾼다.

2. 내가 처리하고 싶은 그림파일이 있는 곳에 tiffread.m을 옮겨 놓는다.

3. 그림파일 이름이 img.tif 라고 하면

octave> img=tiffread('img.tif');

라고 하면 된다.

4. whos를 쳐서 확인해보면 img는 struct라고 표시되어 있을 것이다.

5. img.data 를 확인해보면 img.tif의 픽셀값이 행렬로 들어있다.


여기 올려 둔 그림파일을 내려받은 뒤, GNU Octave를 열어서 아래 네 줄을 쳐보자.


img.tif


octave> img=tiffread('img.tif');

octave> whos

octave> img.data(1:10,1:10)

octave> max(max(img.data))


그럼 다음과 같은 결과가 나와야 한다.



잘 나왔다면 만족.


tiffread.m 이라는 좋은 코드를 만들어 준 François Nédélec과 그의 동료들, merci beaucoup!!!





Comments