이미지 유사성에 대한 문제가 있어 이래저래 API를 알아보고 있었다.
워낙 이미지쪽은 잘 몰라서 손안대던 분야이기도 하다.
막상 보고나니 이거 원.. 세상 참 황홀하다;ㅋㅋㅋㅋㅋ 재밌네;
라이브러리 설치는 매우 간단했다.
먼저 http://www.imagemagick.org/script/binary-releases.php 에 방문하여 라이브러리를 다운로드 한다. ( Unix or Windows )
나는 리눅스에서의 작업이라 Unix Binary Release에서 다운로드 받았다.
설치는 바로 아래에 잘 설명되어 있다. 그대로만 따라하면 끝.ㅋ
rpm -Uvh ImageMagick-6.9.3-2.i386.rpm
(이건 RPM 설치. 직접 다운받았다면 아래과정으로 바로.)cd $HOME설치디렉터리를 선정한다. 예를들어 /home 이라면
tar xvzf ImageMagick.tar.gz다운로드 받은 압축파일을 압축해제한뒤
vi ~/.bash_profile환경변수선언을 위해 .bash_profile 을 열어
...
export MAGICK_HOME="$HOME/ImageMagick-6.9.3"
...
export PATH="$MAGICK_HOME/bin:$PATH
...
LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$MAGICK_HOME/lib
export LD_LIBRARY_PATH
...
위와 같이 MAGICK_HOME을 설정한 후 PATH에 넣어주고, 라이브러리를 등록시킨다.끝. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
convert logo: logo.gif identify logo.gif display logo.gif자, 위와같이 해보아서 logo.gif가 생성되면 성공.ㅋ
흠.. 이제부터 내 목표.
난 이미지편집을 하기 위해 이 라이브러리를 설치한게 아니다.
특정 이미지의 정보들을 얻길 원한다.
identify -verbose a.gif(이 명령에서 얻는 정보들을 원한다고나 할까? ^^;)
먼저 MagickWand API 의 Method들 부터 확인했다. 관련정보는 http://imagemagick.org/script/magick-wand.php 에 가보면 볼 수 있다.
- Magick Wand Methods
- Set or Get Magick Wand Properties
- Magick Wand Image Methods
- Pixel Iterator Methods
- Pixel Wand Methods
- Image Vector Drawing
- Command-line Interface
- Wand View Methods
- Deprecated Methods
- Error and Warning Codes
그리고 그 아래에는 간단한 예들이 나오고 컴파일 방법등이 보였다.
매우 간단하게 설명되어있어 좋았다.ㅋ
좀더 많은 예를 보려면 MagickWand Examples in C를 가란다.
하지만 난 Image statistic 정보를 원하기에 http://www.imagemagick.org/api/statistic.php 이곳으로 이동하여 각 메소드들를 확인해보았다. 그런 와중에 두가지 뻘짓을 하게 되었다.
첫째, 채널간 평균데이터를 보고싶었는데 어찌해야하는가?
둘째, 표준편차와 최소/최대값이 매우 큰 수가 결과로 나온다. 왜?
채널정보를 예를들면,
이미지 內 각 채널의 '첨도'를 구하고 싶다면 GetImageChannelKurtosis를 보면된다.
채널 평균값은 GetImageChannelMean 를 보면된다.
난 전반적인 채널정보를 원한다. 그래서, GetImageChannelStatistics를 이용했다.
channel_statistics=GetImageChannelStatistics(image,exception); red_mean=channel_statistics[RedChannel].mean;
헌데, 난 전체의 종합적인 정보, 즉, identify -verbose {filename} 에서의 Overall 데이터를 원했지만, 이게 당췌 어디로 들어가는지;; 해서 삽질하다 찾아낸게 이거다.
CompositeChannels
kurtosis = channel_statistics[CompositeChannels].kurtosis; //첨도 skewness = channel_statistics[CompositeChannels].skewness; //왜도 mean = channel_statistics[CompositeChannels].mean; //채널평균 standard_deviation = channel_statistics[CompositeChannels].standard_deviation; //표준편차여기서 두번째 문제가 벌견되었다.
표준편차나 최소/최대값의 경우 identity -verbose 의 결과와는 달리 이상하게 큰 수가 보여지는 것이다. 이때문에 한 3시간 삽질한 것 같다. 아오ㅋㅋㅋㅋㅋㅋㅋ
ChannelStatistics와 identity -verbose의 결과들을 모아놓고 침착하게 보았더니 이상하게 일정배수로 기록된거 아닌가 하는 의심을 가지게 되었다. 마치 256배씩 나오는것 같았다. 1~2값이 나오는 경우를 보고 응? 했던 것.ㅋㅋㅋㅋ
256컬러
256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 256컬러, 갑자기 머리속을 채우는 256컬러.아오;ㅋㅋㅋㅋㅋㅋ
결국 결과를 256으로 나누니 정상적인 값이 보여지기 시작했다. (아오삽질사랑;ㅋ)
256....
댓글 없음:
댓글 쓰기