Animation2009. 4. 16. 15:22
자료를 정리하다가 대학교 4학년 때에 작성하였던 레포트를 발견하였습니다.
강사가 자신이 가장 관심있는 분야에 대해서 레포트를 제출하라고 해서
가장 관심있었던 (그리고 지금도 관심이 있는) 에니메이션에 대해서 정리한 레포트입니다.

물론 점수야 잘 받았습니다.

푸훗..

GUNDAM

---------------------------------------------------------------------------------------------------------

銀河鐵道 999를 다시 보며..

       인간이 이 세상에 태어나기 전부터 별은 빛나고 있었다.
    인간이 이세상을 떠난 뒤에도 별은 그 빛을 잃지 않을 것이다.
살아있는 동안 인간은 별의 바다를 올려 보며 스스로의 여로를 생각한다.

 나는 애니메이션 소위 만화영화를 아주 좋아한다. 그 중에서도  銀河鐵道 999를 가장 좋아한다. 끝난지 10여년이 넘어가는 아주 고전에 속하는 작품이지만 요 근래 나오는 웬만한 애니메이션에서는 느끼지 못하는 그런 감동을 가지고 있다. 가장 미래적인 배경과 무대에서 가장 서정적인 면, 인간적인 면을 그리고 있다.  999의 무대는 물론 별의 바다이다.

 銀河鐵道 999(쓰리 나인으로 읽는다.)에서는 경원의 대상인 별의 바다를 여행하며 그 속에 있는 여러 가지를 다른 삶을 보여주고 있다.  주인공 철이는 그 시대의 절대 가치가 된 무한한 생명을 가질 수 있는 기계 몸을 얻기 위해 자신을 새로운 바다로 안내하는 메텔이라는 여성과 함께 여행을 떠난다.  그리고 그 곳에서 여러 가지 생물 혹은 무생물의 슬픔과 기쁨, 사랑과 미움을 보며 한 사람의 진실한 인간으로 성장하게 된다.

  그리고  마침내 경원의 대상이었던 무한한 생명의 기계 몸이 아니라 유한한 생명을 가졌지만 무한한 가능성의 참된 인간으로 남는 것을 택하게 된다.  이러한 것은 작가가 여행하는 별들 하나하나에 의미를 두고 그렸으며 그러한 의미를 소년의 눈을 통하여 관객들에게 전달 하고 있었고 참된 인간으로서의 가치를 보여주고 있는 것이다.

 별의 바다에서 벌어지는 모든 일들을 알고 있는 안내자로서의 메텔은 철이에게 수많은 이야기를 들려주고 배우게 하여 준다. 하지만 자신의 참모습 만은 보여주지 않는다. 아니 어쩌면 그것은 관객들은 물론 작가 자신도 형상화 시킬 수 없는 그런 이미지를 가지고 있기 때문일 것이다. 그것은 결코 전지 전능한 신의 이미지도 천사의 이미지도 아니라 바로 거친 바다와 같은 인생을 살아온 사람 아니면 먼 여행에서 돌아온 뱃사공과 같은 이미지를 지니고 있다.  때문에 사람들은 메텔을 소년시절의 꿈을 여행하는 여자 청춘의 환상을 여행하는 여인 이라고 부른다.그녀는 유한한 생명과 무한한 가능성의 인간을 선택한 철이를 뒤로 하고 다시 새로운 소년을 데리고 별의 바다로 다시 떠난다.  울고 있는 철이를 태운 999은 메텔을 태운 또 다른 999과 별의 바다를 영원히 평행선을 그리며 나갈 뿐이었다.

 작가 마스모토 레이지는 철이라는 캐릭터를 통해서 한없는 별의 바다를 여행하는 모습을 보여준다. 그 곳에는 사람들이 갈구하던 영원에의 성취도 신화에 나오는 소명에 대한 성취의 결과도 없다. 단지 광활한 인생의 새로운 바다를 헤쳐나가야 할 부름만이 있을 뿐이었다.  그 운명의 바다를 노련한 뱃사공의 안내로 헤쳐나가고 있었고 마침내 스스로 헤쳐나갈 수 있게 되었을 때 그 뱃사공은 새로운 소명을 가지고 떠나가는 것이다.  

 이러한 것은 뒤이은 최종 편에서 확연하게 보여준다.  우여 곡절 끝에 철이는 메텔과 다시 만나게 되지만 새로운 소명이 끝나게 되었을 때  메텔은 다시 철이 곁을 떠나게 된다.  역에서 스쳐 지나가는 창을 통하여 뒤에 남아있는 메텔의 모습을 본 철이는 다시 메텔과 헤어져야 하는 운명임을 깨닫게 된다.  하지만 결코 처음처럼 울지는 않는다. 철이는 어느덧 어른이 된 것이다.  

여기에서 등장하는 기차역은 여러 가지 의미를 부여 받았다  이야기의 시작과 끝 혹은 또 다른 이야기의 시작을 의미 하며, 도착과 발착의 기점의 의미 외에도 사랑하는 사람들을 뒤로 한 채 떠나가야 하는 사람들의 마음이 있는 곳, 현재의 삶에서 한 단계 더 나은 삶으로의 탈출 혹은 상승 출구로서의 의미를 지니기도 했다. 그러한 것 외에도 역은 여행의 최종 목적지라고 할 수 있는 안식의 땅을 나타내기도 하였다. 결코 크지도 않는 작은 시골역을 통하여 작가는 아련한 추억의 고향 역을 보여 주려고 노력했었다  과연 얼마나 많은 사람들이 조그마한 역을 통해서 삶의 바다를 여행하고 있을까 ?  

 늙은 뱃사공이 바다를 향해 꿈을 키우는 소년에게 말하는 것처럼 세상에는 많은 바다가 있다. 그리고 그 바다에는 더욱 많은 파도와 태풍 그리고 역이 있을 것이다.  그리고 그 바다에는 늙은 뱃사람과 같은 안내자가 있을 것이고 그 바다 너머에는 그 누구도 가보지 못한 무한한 새로운 바다가 있을 것이다.

 최종 편  "사요 나라 銀河鐵道999" 의 마지막 장면은 그 장면을 본 사람만이 느낄 수 있는 그런 느낌을 가졌다. 수많은 별들을 여행한 사람들만이, 청춘의 환상을 경험한 사람들만이, 소년시절의 꿈을 가진 사람들만이, 새로운 바다로 떠나가는 뱃사람만이 지을 수 있는 표정을 주인공의 얼굴에 그린 작가에게 별의 바다와 같은 경의를 표할 수 밖에 없었다.

'Animation' 카테고리의 다른 글

다시보는 Z 건담  (1) 2011.03.15
건담 팬들을 위한 부천 판타스틱 영화제  (2) 2010.05.26
강식 장갑 가이버 2005  (0) 2009.12.01
건담 강림..  (0) 2009.06.17
막장 기어스 드디어 다 보다  (0) 2009.01.03
Posted by GUNDAM_IM
Computer Vision2009. 4. 11. 17:41

OpenCV Convert Image


() 글을 읽기 전에
글은 저와 같은 OpenCV초보자를 위해서 정리하는 것입니다.
전문가시라면 굳이 읽을 필요가 없습니다.
공부하면서 정리하는 글이라서 서툰 부분이 많이많이 보입니다.


영상 처리를 하기 위해서는 때때로 컬러 공간을 바꾸어 줘야 할 때가 많습니다.

영상에서 필요한 정보를 찾아서 추출하기 위해서는 RGB공간에서 얻을 수 없는 정보를

다른 컬러 공간에서 얻어낼 수 있기 때문입니다.

예를들어서 사진에서 휘도를 바꾸고 싶을 경우

YCbCr로 바꾼후에 Y를 변경하고 다시 이것을 RGB로 바꾸는 과정을 거치게 됩니다.

이럴 경우 컬러 공간을 변환하는 함수가 있어야 하는데

OpenCV에서는 아래 함수가 그 동작을 도와줍니다.

cvCvtColor( 입력 이미지 , 출력 이미지 , 옵션 ); 


옵션은 아주 많이 있지만 아래에 몇가지 중요한 옵션을 설명하였습니다.


  CV_RGB2GRAY  : 흑백으로 바꾸기

                            수식은 다음과 같다.

RGB[A]->Gray: Y<-0.299*R + 0.587*G + 0.114*B


  CV_RGB2YCrCb : YCrCb로 바꾸기

    Y <- 0.299*R + 0.587*G + 0.114*B

  Cr <- (R-Y)*0.713 + delta

  Cb <- (B-Y)*0.564 + delta


  CV_RGB2HLS    : ( Hue Lightness Saturation ) 으로 변환한다.

   // In case of 8-bit and 16-bit images

  // R, G and B are converted to floating-point format and scaled to fit 0..1 range

  V,,max,, <- max(R,G,B)

  V,,min,, <- min(R,G,B)

  L <- (V,,max,, + V,,min,,)/2

  S <- (V,,max,, - V,,min,,)/(V,,max,, + V,,min,,)  if L < 0.5

        (V,,max,, - V,,min,,)/(2 - (V,,max,, + V,,min,,))  if L = 0.5

           (G - B)*60/S,  if V,,max,,=R

  H <- 180+(B - R)*60/S,  if V,,max,,=G

        240+(R - G)*60/S,  if V,,max,,=B

  if H<0 then H<-H+360

  On output 0=L=1, 0=S=1, 0=H=360.

  The values are then converted to the destination data type:

      8-bit images:

           L <- L*255, S <- S*255, H <- H/2

      16-bit images (currently not supported):

          L <- L*65535, S <- S*65535, H <- H

      32-bit images:

          H, L, S are left as is


  CV_RGB2HSV : RGB 값을 HSV로 바꾼다. HSV란 Hue Saturation Value를 의미한다.


  // In case of 8-bit and 16-bit images

  // R, G and B are converted to floating-point format and scaled to fit 0..1 range

  V <- max(R,G,B)

  S <- (V-min(R,G,B))/V   if V?0, 0 otherwise

           (G - B)*60/S,  if V=R

  H <- 120+(B - R)*60/S,  if V=G

       240+(R - G)*60/S,  if V=B

  if H<0 then H<-H+360

  On output 0=V=1, 0=S=1, 0=H=360.

  The values are then converted to the destination data type:

      8-bit images:

          V <- V*255, S <- S*255, H <- H/2 (to fit to 0..255)

      16-bit images (currently not supported):

          V <- V*65535, S <- S*65535, H <- H

      32-bit images:

          H, S, V are left as is

  CV_RGB2Lab : CIE Lab Color로 변환한다.

  // In case of 8-bit and 16-bit images

  // R, G and B are converted to floating-point format and scaled to fit 0..1 range

  // convert R,G,B to CIE XYZ

  |X|    |0.412453  0.357580  0.180423| |R|

  |Y| <- |0.212671  0.715160  0.072169|*|G|

  |Z|    |0.019334  0.119193  0.950227| |B|

  X <- X/Xn, where Xn = 0.950456

  Z <- Z/Zn, where Zn = 1.088754

  L <- 116*Y^1/3-16      for Y>0.008856

  L <- 903.3*Y           for Y<=0.008856

  a <- 500*(f(X)-f(Y)) + delta

  b <- 200*(f(Y)-f(Z)) + delta

  where f(t)=t^1/3^              for t>0.008856

        f(t)=7.787*t+16/116   for t<=0.008856

  where delta = 128 for 8-bit images,

                0 for floating-point images

  On output 0=L=100, -127=a=127, -127=b=127

  The values are then converted to the destination data type:

      8-bit images:

          L <- L*255/100, a <- a + 128, b <- b + 128

       16-bit images are currently not supported

       32-bit images:

          L, a, b are left as is


  •   CV_RGB2Luv  CIE Luv Color로 변환한다.

  // In case of 8-bit and 16-bit images

  // R, G and B are converted to floating-point format and scaled to fit 0..1 range

  // convert R,G,B to CIE XYZ

  |X|    |0.412453  0.357580  0.180423| |R|

  |Y| <- |0.212671  0.715160  0.072169|*|G|

  |Z|    |0.019334  0.119193  0.950227| |B|

  L <- 116*Y^1/3^      for Y>0.008856

  L <- 903.3*Y      for Y<=0.008856

  u' <- 4*X/(X + 15*Y + 3*Z)

  v' <- 9*Y/(X + 15*Y + 3*Z)

  u <- 13*L*(u' - u,,n,,), where u,,n,,=0.19793943

  v <- 13*L*(v' - v,,n,,), where v,,n,,=0.46831096

  On output 0=L=100, -134=u=220, -140=v=122

  The values are then converted to the destination data type:

      8-bit images:

          L <- L*255/100, u <- (u + 134)*255/354, v <- (v + 140)*255/256

      16-bit images are currently not supported

      32-bit images:

          L, u, v are left as is


코드는 아래와 같습니다.


#include <stdio.h>

#include <unistd.h>

#include <string.h>

#include <errno.h>


#include <opencv/cv.h>

#include <opencv/highgui.h>


int main(int argc , char *argv[]){


  IplImage *imgB ;





  if (argc < 3 )

        {

                printf("usage : colorcvt.elf srcimage dstimage option \n");

                printf("      srcimage : source image file name\n");

                printf("      dstimage : destination image file name\n");

                printf("      option   : 0 : CV_RGB2GRAY \n");

                printf("                 1 : CV_RGB2YCrCb \n");

                printf("                 2 : CV_RGB2HLS \n");

                printf("                 3 : CV_RGB2HSV \n");

                printf("                 4 : CV_RGB2Lab \n");

                printf("                 5 : CV_RGB2Luv \n");

                exit(0);

        }


  // 이미지 읽기

  IplImage *imgA = cvLoadImage( argv[1] , 1);


  // 대상 이미지 확정

  switch( *argv[3] )

  {

   case '0' :

              imgB = cvCreateImage( cvGetSize( imgA), IPL_DEPTH_8U, 1);

              cvCvtColor(imgA , imgB , CV_RGB2GRAY );

              break;

   case '1' :

              imgB = cvCreateImage( cvGetSize( imgA), IPL_DEPTH_8U, 3);

              cvCvtColor(imgA , imgB , CV_RGB2YCrCb  );

              break;

   case '2' :

              imgB = cvCreateImage( cvGetSize( imgA), IPL_DEPTH_8U, 3);

              cvCvtColor(imgA , imgB , CV_RGB2HLS  );

              break;

   case '3' :

              imgB = cvCreateImage( cvGetSize( imgA), IPL_DEPTH_8U, 3);

              cvCvtColor(imgA , imgB , CV_RGB2HSV  );

              break;

   case '4' :

              imgB = cvCreateImage( cvGetSize( imgA), IPL_DEPTH_8U, 3);

              cvCvtColor(imgA , imgB , CV_RGB2Lab  );

              break;

   case '5' :

              imgB = cvCreateImage( cvGetSize( imgA), IPL_DEPTH_8U, 3);

              cvCvtColor(imgA , imgB , CV_RGB2Luv  );

              break;


  }



  cvNamedWindow("Converted Image",0);

  cvShowImage("Converted Image",(CvArr*)imgB);

  cvWaitKey(0);

  cvDestroyWindow("Converted Image");


  cvSaveImage( argv[2] , imgB);

  cvReleaseImage( &imgA );

  cvReleaseImage( &imgB );

  return 0;

}


아래는 각각의 옵션으로 했을때의 그림입니다.

컬러 스페이스가 틀린것을 강제로 출력한 형태이므로 다른 컬러 공간의 그림은 정확하게 표현되지는 않습니다. 그냥 이렇게 되었다는 것만 보면 될 듯 합니다.


원본 이미지


사용자 삽입 이미지


흑백으로 변환 이미지

사용자 삽입 이미지



사용자 삽입 이미지

사용자 삽입 이미지


사용자 삽입 이미지
사용자 삽입 이미지










'Computer Vision' 카테고리의 다른 글

OpenCV - cvSmooth  (2) 2009.04.22
Rob Hess의 SIFT [6]  (0) 2009.04.18
OpenCV - Image Mask  (0) 2009.03.16
OpenCV - Extract  (2) 2009.03.12
OpenCV - Image Rotation & Scale  (0) 2009.03.10
Posted by GUNDAM_IM
ASIC SoC2009. 4. 7. 07:57

아래에 관련된 글을 올렸는데요


이번에는 그냥 동작하는 사진을 올립니다.

AHB 버스를 통해서 FPGA보드를 구동하는 것입니다.

예상보다 쉽게 동작을 성공시켜서 기분이 좋습니다.


보드 색상도 맘에 들고,

사실 녹색 보드는 너무 평범하고, 맘에 안들죠


다음 보드 색상은 푸른색입니다.

"기가노스의 푸른매" 를 생각해서 선택할 색상입니다.

(혹 모르시는 분들은 메탈아머 드래고나를 보시기 바랍니다.)


이제 ARM Platform 만들때 프로세서 때문에 FPGA 테스트에서 고생할 일은

많이 줄어들것 같습니다.


통상 3배의 개발 편의성 (ㅋㅋ)


사용자 삽입 이미지

Posted by GUNDAM_IM
MAC Life2009. 3. 30. 13:52
이번에 드디어 17" Mac Book Pro를 입하 하였습니다.

그동안 산것을 세어보니 5번째네요

Apple-IIe -> Newton Message Pad 130 -> MAC Book Pro 15" 초기형 -> MAC PRO -> MAC BOOK PRO 17"

17"를 장만한것은 그동안 잘 사용하던 MAC BOOK PRO 15" 가 이제 3년의 보증기간이 끝났고,
무엇보다 그동안 차에서 떨어뜨리고, 애기들이 사뿐히 밟아주고, 비도 맞고, 책상 모서리에 찍히고 해서
성한 곳이 없는 외모에다가, 내부에 하드 바꾼다고 몇번이나 케이스를 열고 닫아서,
내부도 그닥 성한곳이 없습니다.

항상 재조립을 하면 나사가 한두개 남더라구요 (^___^)

그래서 새로 장만해야겠다고 생각하고 있었고 Air를 고려했지만,
서브 노트북은 예전에도 써봤는데 성능이나 모든면에서 그렇게 땅기지가 않아서 이번는 아예 커다란 사이즈로 가기로 했습니다.

암튼 항상 느끼는 것이지만 애플이 좋은것은 15" 버전이 3년이 넘었는데도 아직도 새로운 프로그램을 올려도 그렇게 성능이 부족하다는 느낌이 하나도 들지 않습니다. 처음이나 지금까지도 아무런 문제가 없이 잘 쓸 수 있다는 점이 강점이고, Apple Care에 등록하면 3년간은 거의 1:1 무상으로 서비스를 받기 때문에 편리합니다.

집에있는 책상에는 Message PAD 130 이 있습니다.  , 최초의 PDA씨리즈 입니다.
애플이 스컬리 (X파일이 아닙니다.) 사장 시절에 의욕적으로 추진한 제품인데, 결국 시대를 쪼끔 앞서간 느낌으로 망한 제품이지요. 물론 아직도 잘 동작합니다. 배터리 새거로 넣으면 잘 동작해요.. 요샌 쓰지 않아서 고이 책상위에 모셔놓았습니다. 가끔 큰넘이 노리기는 하지만, 그냥 장난감 핸드폰인줄 알고 있습니다. 디보 컴퓨터보다 작고 또 무겁고,  핸드폰 보다는 크다고 싫어합니다

구형과 신형에서 바뀐점은

    프로세서가 좀더 좋아진점하고
    메모리가 4G로 바뀌었다는점
      - 2G는 자이링스 ISE도 잘 못돌리는 메모리여서 고생이 많았습니다.
    팬의 소음이 좀 쎄졌다는것..
    그리고 마우스 트랙패트에 버튼이 트랙패드 자체로 대치되어서 그 밑으로 숨었다는 점
    애플의 자랑 멀티터치가 지원된다는 점 - 우훗.. 디따 큰 아이팟 같습니다.
    -  이거 물건입니다. PT할때 이걸로 그림 보여주고, 회전 확대를 하면,
       보는 사람들이 빨려들어갑니다.
    무게가 좀더 무거워져서 어깨가 아플것 같다는 점

 등입니다.
 
17" 제품은 좀더 써보고 (시간이 나면) 사용 후기를 올리도록 하곘습니다.


'MAC Life' 카테고리의 다른 글

맥에서 프로파일링 하기  (0) 2009.06.18
OSX용 YUV Player 입니다.  (0) 2009.06.16
맥에서 개발한다는 것은..  (0) 2009.03.19
수치스러운 인터페이스의 명예의 전당  (0) 2009.03.05
Culture Code의 개발 이미지  (0) 2009.01.28
Posted by GUNDAM_IM
ASIC SoC2009. 3. 26. 07:49

이번에 칩을 하나 만들면서 SilverChip 기능을 넣었습니다.


ARM926-EJS로 여러가지 기능을 많이 넣어서 만들었습니다만,


그중에 백미는

 Graphic Accelerator 와

 SilverChip기능입니다.


Silver Chip이란 프로세서 Core와 그 Core의 AHB버스가 밖으로 나와서 동작하는 Chip입니다.

내부에서는 ARM926 Core와 약간의 Glue Logic이 들어간 것입니다.

ARM사에서 제공하는 CoreTile B/D의 칩을 생각하시면 맞습니다.


이번에 개발한 칩은 본래 목적은 그래픽/미디어 처리 프로세서이지만

그 외에도 내부 개발용으로 사용하기 위해서 Silver Chip 기능을 추가해서 만든 것입니다.


보드를 만들때,  "그분" 전용으로 만들려고 붉은색으로 PCB를 만들었습니다.

패키지도 "그분" 전용 답게 붉은색으로 하면 좋지만, 검정색 밖에 없어서 아쉽습니다.

물론 통상 3배의 속도로 동작하지는 않습니다. (^^)


멋질거라 생각했고 나온 보드 색상도 나름 괜찮은데,


보드 색상에 대해서 결과물을 보고 멤버들이 비난아닌 비난을 조금 해서..

맘 상했습니다. 쩝..

아직도 건담의 로망을 모르다니..


AHB에 대한 테스트와 , SoC Chip의 프로토 타입 FPGA 검증 등, 보드 개발시에 편리성 등을 따져보면,

통상 3배의 (속도가 아니고) 개발 편의성을 자랑할 수 있습니다.ㅋㅋ


아래에 사진을 올립니다


사용자 삽입 이미지

밑에 있는 보드는 자체 개발한 프로토 타입 보드입니다.

그동안 프로토타입 보드를 3개를 개발했는데 그중 3번째보드입니다.

Virtex 5 제일 큰것이 2개 들어간 막강 보드입니다.


사용자 삽입 이미지

이것이 마지막 프로토타입보드가 되었으면 하는데 Virtex6가 가을에 나오고

용량이 Virtex5의 2배가 된다고 하니


나중에는 그분 전용 프로토 타입보드를 개발해야 하지 않을까 합니다.


아니면 그때는 GOLD로 해볼까요 ? KOG를 고려해 봐야하지 않을까 생각합니다.

그럼 파티마도  필요할텐데~

Posted by GUNDAM_IM