천객만래 [千客萬來] (It has an interminable succession of visitors)

[영역처리] Thinning (세선화) --- ③


2003.09.01


위의 그림은 알고리즘을 적용한 실험결과.


Zhang Suen 세선화 알고리즘의 주요부분임.


소스코드(주요부분) 

   // mark and delete pixels. 
   While Again = 1 Do 
   Begin 
       again := 0; 
       // Second sub-iteration. 
       For row := 1 To sy -2 Do 
           For col := 1 To sx -2 Do 
           Begin 
               If tTgt[col, row] <> 1 Then 
                   Continue; 
               k := nays8(tTgt, col, row); 
               If ( (k >= 2) And (k <= 6) ) And (Connectivity(tTgt, col, row) = 1) Then 
               Begin 
                   If ( tTgt[col+1, row] * tTgt[col, row-1] * tTgt[col-1, row] = 0) And 
                     ( tTgt[col, row-1] * tTgt[col, row+1] * tTgt[col-1, row] = 0) Then 
                   Begin 
                       localTgt[col, row] := 1; 
                       again := 1; 
                   End; 
                   // of if ..else. 
               End // End of if tTgt. 
           End; // Of For col. 
       // End of For row. 

       // delete pixel. 
       DeletePixel(tTgt, localTgt); 
       If Again = 0 Then 
           Break; 

       // First sub-iteration. 
       For row := 1 To sy -2 Do 
           For col := 1 To sx -2 Do 
           Begin 
               If tTgt[col, row] <> 1 Then 
                   Continue; 
               k := nays8(tTgt, col, row); 
               If ( (k >= 2) And (k <= 6) ) And (Connectivity(tTgt, col, row) = 1) Then 
               Begin 
                   If ( tTgt[col, row-1] * tTgt[col+1, row] * tTgt[col, row+1] = 0) And 
                     ( tTgt[col+1, row] * tTgt[col, row+1] * tTgt[col-1, row] = 0) Then 
                   Begin 
                       localTgt[col, row] := 1; 
                       again := 1; 
                   End; 
                   // of if ..else. 
               End // End of if tTgt. 
           End; // Of For col. 
       // End of For row. 

       // delete pixel. 
       deletePixel(tTgt, localTgt); 
   End; // of While Again. 





Posted by SB패밀리

[영역처리] Thinning (세선화) --- ②


2003.05.27



[영역처리] Thinning (세선화) --- ② 2003/5/27

영상처리 알고리즘에서 세선화는 대상 물체를 선 폭을 섬세하게 하여 한 픽셀의 두께를 갖는 중심선으로 추출하는 조작을 말한다.

이 세선화의 기본적인 세선화 알고리즘은 기본적으로 순차적 처리(sequential processing) 방법과 병렬적 처리(parallel processing) 방법으로 구분할 수 있다.  

⇒ 순차적 처리 방법: 현재의 처리 결과가 과거의 처리값에 영향을 받으며 미래의 처리 결과에도 영향을 미치는 것으로 이 방법에서는 대상 화상만 있으면 처리가 가능하다.한다. 

⇒ 병렬적 처리 방법: 현재의 처리 결과가 과거나 미래의 처리 결과에 전혀 영향 을 받거나 미치지 않는 것으로써 추가적으로 대상 화상 크기만큼의 버퍼가 필요하다. 현재의 관심 화소(pixel)에 대한 처리 결과를 버퍼에 저장하는 방식으로, 전체 화상에 대한 한 차례의 처리가 모두 끝난 다음 에 버퍼에 저장되어 있는 처리 결과를 원래의 대상 화상 위에 덮어 쓰게 된다. 

Zhang Suen 알고리즘

Zhang Suen 세선화 알고리즘은 1984년에 처음으로 발표한 것으로 병렬적 처리(Parallel Processing)방법의 하나로써 기본적인 알고리즘은 다음과 같다. 

1루프>처리대상인 검은 픽셀 I(i,j)에 대해서 다음과 같은 조건을 만족하면 지운다. 

① 픽셀 I(i,j)에 대해서 그 주위의 픽셀들의 connectivity가 1이고, 
② 픽셀 I(i,j)에 대해서 그 주위의 픽셀들 중 검은 픽셀이 적어도 2개에서 6개사이에 있어야 하며, 
③ 적어도 픽셀 I(i,j+1), I(i-1,j), I(i,j-1)중의 하나는 배경 픽셀 즉 255이어야 하며, 
④ 적어도 픽셀 I(i-1,j), I(i+1,j), I(i,j-1)중의 하나는 배경 픽셀 즉 255이어야 한다. 
⑤ 조건에 맞으면 픽셀을 제거한다. 

2루프>처리대상인 검은 픽셀 I(i,j)에 대해서 다음과 같은 조건을 만족하면 지운다. 

① 픽셀 I(i,j)에 대해서 그 주위의 픽셀들의 connectivity가 1이고, 
② 픽셀 I(i,j)에 대해서 그 주위의 픽셀들 중 검은 픽셀이 적어도 2개에서 6개사이에 있어야 하며, 
③ 적어도 픽셀 I(i-1,j), I(i,j+1), I(i+1,j)중의 하나는 배경 픽셀 즉 255이어야 하며, 
④ 적어도 픽셀 I(i,j+1), I(i+1,j), I(i,j-1)중의 하나는 배경 픽셀 즉 255이어야 한다. 
⑤ 조건에 맞으면 픽셀을 제거한다. 

위의 두 subiteration을 계속하여 더이상 지울 픽셀이 남아 있지 않을 때까지 계속 적용 시킨다.

Posted by SB패밀리

[개념] DCT(Discrete Cosine Transform) 압축 기술


2003.05.27



DCT 압축기술 

  1974년은 오늘날 멀티미디어 혁명을 가능케 한 기념비적인 발명이 있던 해이다. 미 텍사스대학의 라오 교수를 비롯한 3명의 연구진이 이산여현변환 (DC T: Discrete Cosine Transform)이라는 새로운 직교변환에 관한 논문을 IEEE학술지에 발표했던 것이다. 이 DCT는 특히 영상의 압축에 탁월한 성능을 갖는 것으로 오늘날 멀티미디어 관련 국제표준인 H.261, JPEG, MPEG의 핵심요소로 자리잡고 있다. 

  문자, 도형, 일반 데이터 등을 무손실 압축하면 완전 복구가 가능하지만 압축률은 평균적으로 2대1정도이다. 반면 영상 음성 음향 등의 데이터를 인간의 눈과 귀가 거의 느끼지 못할 정도로 작은 손실을 허용하면서 압축하면 10 대1이상의 압축률을 쉽게 얻을 수 있다. 

  동영상의 경우 화면간 중복성과 화면내 화소간 중복성이 많아 시각 특성을 잘 활용하면 MPEG영상 압축에서 볼 수 있듯이 30대1이상의 압축을 쉽게 얻을 수 있다. 정지영상은 화면내 화소의 중복성만이 있고, 한 화면이므로 화면간 중복성은 없어 JPEG에서 보듯이 MPEG보다는 다소 압축률이 낮다. 영상이 중복성이 높은 3차원(동영상) 혹은 2차원(정지영상) 데이터여서 압축도 크게 되는데 비해 음성과 음향은 중복성이 상대적으로 떨어지는 1차원 데이터여서 압축률도 영상에 비해 크게 떨어진다. 북미 이동통신용의 음성 압축방식인 VSELP에서는 8대1정도의 압축률이 얻어지고, 돌비 AC-3이나 MPEG 음향 압축에 있어서는 단일 채널의 경우 6대1, 채널간 중복성이 높은 스테레오나 다채널(예:극장영화 감상시의 5.1채널)의 경우 10대1정도의 압축이 얻어진다. 영상데이터를 효과적으로 압축하기 위한 목적으로 가장 널리 쓰이는 손실부호화 기법은 변환부호화이다. 이 방식의 기본구조는 공간적으로 높은 상관도를 가지면서 배열되어있는 데이터를 직교변환에 의하여 저주파 성분으로부터 고주파 성분에 이르기까지 여러 주파수 성분으로 나누어 성분별로 달리 양자화하는 것이다. 

  이때 각 주파수 성분간에는 상관도가 거의 없어지고 신호의 에너지가 저주파 쪽에 집중된다. 단순 PCM에 비해 같은 비트율에서 얻는 변환부호화의 이득은 각 주파수 성분의 분산치의 산술평균과 기하평균의 비와 같다. 즉 저주파쪽 으로 에너지의 집중이 심화될수록 압축효율이 높다. 

  공간상의 데이터에 대한 단순 PCM은 모든 표본을 같은 길이(예:m비트/표본) 의 비트로 표현하며 신호대 양자화 잡음비는 약 6m가 된다. 반면 직교변환에 의해 주파수 영역으로 바뀐 데이터는 에너지가 많이 모이는(즉 분산치가큰) 주파수 성분이 보다 많은 비트를 할당받아 그 주파수 성분을 보다 충실히 표현하도록 하고 있다. 분산치가 4배(즉 진폭이 2배) 될 때마다 1비트씩 더 할당받는데 이렇게 되면 모든 주파수 성분에서 동일한 양자화 에러 특성을 갖게 된다. 

  여러가지의 직교변환 가운데 이론적으로 영상신호의 에너지 집중특성이 가장 뛰어나 압축에 가장 효과적인 것은 카루넨-뢰브 변환(KLT)이다. 그러나 이것은 영상에 따라 변환함수가 새로 정의되어야 하므로 현실적으로 사용할수 없다. 

  이 KLT에 충분히 가까운 성능을 가지면서 구현 가능한 변환을 찾는것이 라오 교수팀의 목표였고 그 결과가 바로 앞에 말한 DCT이다. 

  현재 여러 국제표준에 핵심기술로 자리잡고 있는 DCT는 8×8크기의 화소를 하나의 블록으로 묶어 변환의 단위로 삼고 있다. 블록의 크기를 키울수록 압축효율은 높아지나 변환의 구현이 훨씬 어려워진다. 실험적으로 8×8이 성능과 구현의 용이성간 타협점으로 선택되었다. 

  DCT 변환계수의 양자화는 스칼라 양자화(SQ)와 벡터 양자화(VQ)가 가능하다. VQ는 보통 계수간 상관도가 높을 때 효과적이고 대신 SQ보다는 복잡도가 높다. DCT계수들끼리는 이미 상관도가 거의 없어 현재 국제표준 에서는 SQ를 채택하고 있다. 또 SQ도 다시 구현이 용이한 선형과 특성이 좋은 비선형 기법으로 나뉘는데 양자화된 계수가 다시 엔트로피 부호화(무손실)를 거치면 두 기법간 성능의 차가 작아진다. 현재 국제표준에서는 엔트로피 부호화가 뒤따르고 있어 H.261, JPEG, MPEG-1에서는 선형 기법만을 사용하였다. 그러나 MPEG-2에서는 약간의 성능개선을 위해 비선형 기법도 함께 채택했다. 

  또한 양자화된 DCT계수들의 통계적 특성을 이용한 무손실 압축을 위해 현재 국제표준에서는 런길이 부호화와 허프만 부호화를 결합하여 사용하고 있다. 영상의 압축은 이렇게 DCT, 양자화, 런길이 부호화, 허프만 부호화, 움직임보상 DPCM(동영상의 경우만 해당) 등 많은 기술이 결합되어 이루어지고 있다. 


Posted by SB패밀리

[개념] Wavlet Transform의 개념

2003.05.24




Wavelet Transform의 개념

웨이브렛 해석은 신호처리 계통에 속하는 여러 분야에서 각자의 특수한 목적에 부합되도록 개별적으로 
발전시켜온 특수한 기술들을 하나로 통합하면서 등장하였다. 
컴퓨터 비젼에서 이용된 다해상도(multi-resolution) 분석 방법이나 음성과 영상압축에서 사용되던 
서브밴드(sub-band) 코딩 기법, 응용 수학에서 사용된 웨이브렛 시리즈 전개등 많은 기본 기법들이 
최근에 들어 웨이브렛 이론의 특수한 응용으로 밝혀졌다. 
웨이브렛 해석은 연속 신호와 이산 신호의 경우에 모두 적용될 수 있으며 다양한 분야에서 그 응용 
가능성을 인정받고 있다. 웨이브렛 변환은 특별히 비정형(nonstationary) 신호의 분석에 유리한 특징을 
가져서 고전적인 단구간 퓨리에 변환(STFT : short time fourier transform)이나 
가보 변환(gabor transform)을 대체할 새로운 대안으로 대두되고 있다. 
웨이브렛 변환이 고전적인 단구간 퓨리에 변환과 구별되는 근본적인 차이점은 안구간 퓨리에 변환의 경우 
모든 주파수 대역에 대하여 동일한 크기의 필터 윈도우를 사용하는 반면 웨이브렛 변환은 고주파 
대역에서는 폭이 좁은 윈도우를, 저주파 대역에서는 폭이 넓은 윈도우를 사용한다는 것이다. 
따라서 웨이브렛 해석은 상대 대역폭 불변 해석(constant relative bandwidth analysis)이라고도 
일컬어지며, 주파수 대역의 변화 폭은 항상 주파수 값에 비례한다.

웨이브렛 변환은 입력 신호를 특정 기저 함수의 집합으로 분리하는 과정으로도 이해될 수 있다. 
웨이브렛 변환에 사용되는 기저 함수의 집합은 하나의 기본 웨이브렛 기저 함수(mother wavelet basis 
function)에 대한 시간축 방향으로의 확대 및 축소 그리고 평행 이동을 통해 얻어진다. 기본 웨이브렛 
기저 함수는 특별한 형태의 밴드(band-pass) 필터로 생각할 수 있으며, 웨이브렛 변환의 상대 대역폭 
불변성은 기본 웨이브렛 기저에 대한 시간축 방향 축소 및 확대에 의해 충족되어진다. 이에 따라 
웨이브렛 변환에서는 주파수 대역이라는 용어 대신 스케일(scale)이라는 용어를 주로 사용하며, 
입력 신호에 대한 웨이브렛 변환을 다른 말로 원신호의 시간,스케일 공간표현이라 일컫는다

- 소백 촌닭 -

Posted by SB패밀리

영상 처리의 개념과 분류


2001.06.11



※ 디지털 영상처리(Digital Image Processing)란?

  우리는 현재 멀티미디어 시대에 살고 있다. 멀티미디어란 말이 생소하게 느껴지 는 분들은 아마 없을 것이다. 하지만 99년대 초반과 21 세기를 앞둔 지금 멀티미 디어라는 개념은 점점 더 확장되어 가고 있다. 예전의 미디어는 TV나 오디오 등 이었으나 현재는 인터넷의 보급이 크게 확장되고 있어 그 이용도가 멀티미디어의 개념을 넓혀가고 있는데 어떻게 변화되고 있는지 궁금한 네티즌에게 잠깐 이나마 예를 들어 보기로 하자. 먼저 TV 방송에도 많은 변화가 생기고 있는데 단순히 TV 만 이용하는 것이 아니라 인터넷에서 동시에 문자 방송 및 실시간(Real Time)기술 을 도입하여 영상도 지원하고 있다. 물론 아직은 과도기적인 면이 없지 않지만 세 계 어느 곳 에서든 동시에 정보를 얻을 수 있다는 면에서 큰 변화라고 하지 않을 수 없다. 물론 이 정보라는 것은 단일 문자나 영상이 아니라 그 모든 것이 한꺼번 에 이용되고 있는 것이다.

  인터넷을 접해본 독자라면 많이 느꼈겠지만 그림 파일 하나 얻는데도 많은 시간 을 소비한 경험이 있을 것이다. 여기서 영상처리의 필요성이 대두되어 많은 연구 가 진행 되고 있다. 디지털 영상처리는 멀티미디어 시대에 있어 중요한 역할을 하 는 영상을 컴퓨터를 이용하여 처리하는 분야이다. 인간은 기본적으로 시각적인 생 물이다. 사람은 직관적으로 얻는 정보 중 99% 이상을 눈에의존한다. 영상처리란 이처럼 우리에게 친숙한 영상을 카메라나 스캐너를 통하여 전자적으로 얻은 후, 여러가지 목적에 따라 컴퓨터와 여러 가지 알고리즘을 적용하여 처리하는 것이다. 

  ※ 디지털 영상처리의 개념과 분류

  디지털 영상처리는 컴퓨터를 이용하여 영상을 처리하는 것이다. 이때 영상의 획 득은 CCD카메라일 수도 있고 사진기일 수 도 있으며 인터넷에서 얻은 그림파일일 수도 있다. 1960년대부터 시작된 영상처리는 앞에서도 언급한 바와 같이 멀티미디 어 시대에 들어옴으로써 더욱 중요한 연구 분야로 부각되고 있다. 예전에는 하드 웨어의 값이 비싸고 컴퓨터의 높은 성능을 요구한 만큼 극 소수 전문가만의 영역 이었으나, 컴퓨터 성능의 향상과 하드웨어의 가격하락으로 누구나 접할 수 있는 연구 분야가 되어가고 있다. 영상처리 분야간에 정확한 구분 선은 없어져 가고 있 지만 다음과 같이 나눌 수 있다. 

  1) 영상조작(Image Manipulation) 

   영상에 원하지 않는 잡음이 있거나 오래된 사진을 스캐너로 읽었을 때 흐려진 영 상과 사진의 초점이 흐려진 경우 원하는 영상을 얻기위한 조작, 기하학적인 교정 (인공위성 영상 등), 영상 콘트라스트의 향상 작업 등을 영상조작이라고 한다. 영상처리에 있어서 매우 기본적이면서도 중요한 부분이며 앞으로 이 부분이 가장 많이 언급될 것이다. 

  2) 영상 분석(Image Analysis) 


  인쇄된 글자의 식별, PCB기판의 정밀도 체크, 의료 분야에서의 세포 분석 등 영 상을 분석하는 영역을 말한다.

  3) 영상 인식(Scene Analysis) 

  사람의 눈으로 영상의 특징을 발견하기란 쉽지가 않다. 미세한 영상물의 차이점 을 발견하고 영상물을 비교하여 영상을 인식할 수 있도록 하는 영역을 말한다. 그 예로 지문 인식 시스템이나 로봇시각시스템 등이 있으며 본질적으로 구현하기 어 려우며, 유용한 시스템을 위해서 많은 연구가 필요하다.

  4) 영상 통신(Image Transmission)

  영상을 케이블이나 위성 등으로 전송함에 있어 어떻게 효율적으로 전송할 것인가 를 연구하는 분야로서 영상 압축을 이용하여 영상을 처리, 전송하는 영역이다. 영 상 통신의 중요한 과제 중의 하나는 영상 압축 알고리즘이다.

  영상 처리는 컴퓨터 그래픽(computer graphics), 컴퓨터 비젼(Computer Vision) 과 밀접한 관계가 있다. 컴퓨터 그래픽은 컴퓨터를 이용하여 영상을 생성시키는 쪽에 주력하는 분야이고 컴퓨터 비젼은 비젼은 영상 처리 중에서도 특히 영상의 인식, 이해 등을 중점적으로 주로 연구하는 분야이다. 반면에 영상 처리는 보통 여러 장치들을 통하여 이미 생성된 영상을 입력으로 하여 영상을 변화시키는 것이며 영상을 재가공하거나 영상에서 정보를 추출하는 과정이라 할 수 있다.



'IT - 개발' 카테고리의 다른 글

그리스 문자 발음과 표현  (0) 2016.06.26
RISK 관리란  (0) 2016.06.26
영상 처리의 개념과 분류  (0) 2016.06.26
영상처리의 알고리즘에 따른 분류  (0) 2016.06.26
영상처리 응용분야  (0) 2016.06.26
Delphi 설치 후 TChart(TeeChart)가 없다?  (0) 2016.06.24
Posted by SB패밀리

영상처리의 알고리즘에 따른 분류


2001.06.11



영상처리를 알고리즘에 따라 분류하는 기본적인 분류 방법으로 네가지로 나눌 수 있다. 

▶ 포인트 처리 
화소의 원래 값이나 위치에 기반하여 화소값을 변경하는 것을 말한다. 


▶ 영역 처리 
화소의 원래 값과 이웃하는 화소의 값을 기반으로 하여 화소값을 변경하는 것을 말한다. 


▶ 기하학적 처리 
화소들의 위치나 배열 정보를 변화시키는 것을 말한다. 


▶ 프레임 처리 
두 개 이상의 영상들에 대한 연산을 기반으로 하여 화소값을 생성하는 것을 말한다. 

▶ 영상 변환[Transform]
영상을 주파수 영역이나 공간 영역으로 변환하는 처리. 



▶ 포인트 처리

Arithmetic Operation [산술연산] 
  화소에 일정한 값을 더하거나 빼거나 나누거나 곱하는 연산 
XOR Operation [XOR 연산] 
  특정한 값을 가진 화소를 발견하는데 사용 
Histogram [히스토그램] 
  화소의 명암값의 빈도(분포)를 나타내는 방법 
Histogram Equalize [히스토그램 평활화]
  일정한 분포를 가진 히스토그램 영상을 생성 
Histogram Specification [히스토그램 명세화] 
  명암대비가 높은 히스토그램 영상을 생성 
Contrast Stretching [명암 대비 스트레칭] 
  영상의 명암값 분포를 최대한 활용하도록 히스토그램을 펼치는 처리 
Basic Contrast Stretch [기본 명암 대비 스트레칭] 
  특정 부분, 즉 중앙에 명암값이 치우치는 히스토그램을 가진 영상에 가장 잘 적용. 영상 히스토그램이 모든 범위의 화소값을 포함하도록 영상을 확장. 
End-In Search [엔드인 탐색] 
  모든 범위의 명암값을 갖지만 히스토그램의 특정 부분에 화소들이 치우친 영상에 가장 잘 적용된다.(일반적임) 
Posterizing 
  영상에서 픽셀이 나타낼 수 있는 명암값(intensity)의 범위를 축소하는 처리(예를 들어, 8단계 포스터라이징). threshold 방법과 비교가 될 수 있겠다. 
Bit Clipping 
  픽셀에서 최상위 비트 중의 일정 부분을 0으로 설정한다. 이는 black에서 white까지의 넓은 범위의 명암값을 갖는 영상을 동일한 명암 주기를 갖는 여러 개의 서브영역으로 나누는 효과를 갖는다. 
등명암 윤곽화 
  특정한 입력 명암값을 white color 또는 black color로 지정한다. 이것은 특정한 구간에 존재하는 영상의 윤곽선을 찾기 위해서 사용될 수 있다. 이런 방법은 단지 몇몇의 지정된 명암값만을 변형하고 대부분의 입력 영상 자료를 원래대로 유지한다. 또, 다른 화소를 원상태로 유지하면서 일정 범위의 화소만을 강조할 수 있다. 
solarizing 
  일정 threshold값까지는 원 영상의 값을 취하다가 threshold 다음부터는 역수를 취한다. 즉, 0 ~ threshold 값 까지는 x 값을 사용하다가 threshold ~ 255까지는 255 - x 값을 사용한다. 
Parabola변환 
  이 변환에는 다음 두가지 공식이 사용될 수 있다. f(x) = 255 - 255 ( x / 128 - 1) ^ 2 과 f(x) = 255 ( x / 128 - 1 ) ^ 2 이다. 


▶ 영역 처리 

Convolution [회선] 
  영상 스무딩, 크리스프닝, 에지 검출 등의 효과를 위해서 빈번하게 사용되는 영상처리 기법 
Blurring [블러링] 
  블러링이나 저주파 공간적 필터링은 한 영상의 세세한 부분들을 제거한다.즉 이웃 화소들과 평균한 결과라는 것을 회선 마스크가 가진 가중치로부터 쉽게 알 수 있음 
Sharpening [샤프닝] 
  고주파 보존 필터링에 기반을 둔 영상처리로 영상의 시각적 날카로움을 증가 
Edge Detection [에지 검출]
  영상의 전경에 대한 윤곽선을 검출한다.
Homogeneity [유사 연산자] 
  빠르고 단순한 에지 검출기는 일련의 화소들을 감산한 값에서 최대값을 결정하는 것으로 유사 연산자는 3x3의 중심 화소로부터 주변의 8화소들 각각을 감산 
Difference [차연산] 
  화소당 4개의 감산을 요구하여 유사 연산자에 비해 빠른 연산을 수행 
Thinning [세선화]
  도형에서 선 폭을 섬세하게 하여 한 픽셀로 이루어진 중심선을 추출하는 조작을 세선화(Thinning)라고 한다. 
Median Filter


▶ 기하학적 처리

Interpolation [보간법] 
  주어진 주변의 점들로부터 잃어버린 자료를 생성해 내기 위해 사용되는 기술의 부류. 예를들어 양선형 보간법은 주어진 두 점들 사이의 선형 관계를 가정 
The Most Adjacent Interpolation [가장 인접한 이웃화소 보간법] 
  출력 화소로 생성된 주소에 가장 가까운 원시 화소를 출력 화소로 할당하는 것(처리속도는 빠르나 ...)




▶ 영상 변환[Transform]

Wavelet Transform

웨이브렛 해석은 신호처리 계통에 속하는 여러 분야에서 각자의 특수한 목적에 부합되도록 개별적으로 
발전시켜온 특수한 기술들을 하나로 통합하면서 등장하였다. 
컴퓨터 비젼에서 이용된 다해상도(multi-resolution) 분석 방법이나 음성과 영상압축에서 사용되던 
서브밴드(sub-band) 코딩 기법, 응용 수학에서 사용된 웨이브렛 시리즈 전개등 많은 기본 기법들이 
최근에 들어 웨이브렛 이론의 특수한 응용으로 밝혀졌다. 
웨이브렛 해석은 연속 신호와 이산 신호의 경우에 모두 적용될 수 있으며 다양한 분야에서 그 응용 
가능성을 인정받고 있다. 웨이브렛 변환은 특별히 비정형(nonstationary) 신호의 분석에 유리한 특징을 
가져서 고전적인 단구간 퓨리에 변환(STFT : short time fourier transform)이나 
가보 변환(gabor transform)을 대체할 새로운 대안으로 대두되고 있다. 
웨이브렛 변환이 고전적인 단구간 퓨리에 변환과 구별되는 근본적인 차이점은 안구간 퓨리에 변환의 경우 
모든 주파수 대역에 대하여 동일한 크기의 필터 윈도우를 사용하는 반면 웨이브렛 변환은 고주파 
대역에서는 폭이 좁은 윈도우를, 저주파 대역에서는 폭이 넓은 윈도우를 사용한다는 것이다. 
따라서 웨이브렛 해석은 상대 대역폭 불변 해석(constant relative bandwidth analysis)이라고도 
일컬어지며, 주파수 대역의 변화 폭은 항상 주파수 값에 비례한다.

웨이브렛 변환은 입력 신호를 특정 기저 함수의 집합으로 분리하는 과정으로도 이해될 수 있다. 
웨이브렛 변환에 사용되는 기저 함수의 집합은 하나의 기본 웨이브렛 기저 함수(mother wavelet basis 
function)에 대한 시간축 방향으로의 확대 및 축소 그리고 평행 이동을 통해 얻어진다. 기본 웨이브렛 
기저 함수는 특별한 형태의 밴드(band-pass) 필터로 생각할 수 있으며, 웨이브렛 변환의 상대 대역폭 
불변성은 기본 웨이브렛 기저에 대한 시간축 방향 축소 및 확대에 의해 충족되어진다. 이에 따라 
웨이브렛 변환에서는 주파수 대역이라는 용어 대신 스케일(scale)이라는 용어를 주로 사용하며, 
입력 신호에 대한 웨이브렛 변환을 다른 말로 원신호의 시간,스케일 공간표현이라 일컫는다

DCT(Discrete Cosine Transform:이상 여현 변환)
화상data를 주파수의 상관관계에 따라 다시 배열하는 변환을 말한다.
DCT는 영상압축에 탁월한 성능을 가진 국제표준 알고리즘이다.



Posted by SB패밀리

피보나치 수열의 합 구하기


public class Ex_10 {
          public static void main(String[] args){
                  int a=1, b=1, hap=2, c;
 
                  for(int i=3; i<=10; i++){
                         c=a+b;
                         hap += c;
                         a = b;
                         b = c;
                  }
                  System.out.println("피보나치 수열의 합 10번째의 합 :"+hap);
          }
}







Posted by SB패밀리

BASE가 64라는 것은 모든 정보를 64진수로 표시한다는 것인데, 
컴퓨터는 2진수를 사용하므로 64진수로 표시하기 위해서는 

2^6 = 64  

즉, 6  bit 2진수 열이 필요하다.

그런데 컴퓨터에서 가장 기본이 되는 정보 단위는 8 bit로 구성된 Byte 단위이므로
6 bit와 8 bit가 각각 나누어 떨어질 수 있는 공배수의 최소값 (최소 공배수)를 구하면 24 bit가 된다.

24 bit는 8 bit 이고 Byte로 변환하면 3 Byte가 된다.
64진수로 표현하려면 6 bit 구성으로  4 단위가 된다. 

따라서 Base64의 인코딩 원리는 3 Byte 단위마다 (즉, 24 bit 마다) 6 bit씩 나누어서 6 bit 문자 4개로 만드는 것이다.
이 때 6 bit씩 쪼개진 단위를 A-Z a-z 0-9 +- (모두 64개 문자)로 각각 대응시키면 Base64 인코딩이 된다.
다만, 실제 데이터 길이가 3 Byte에 미치지 못한다면 '='로 대체 한다.


Base64 Encoding / Decoding

그런데 입력되는 정보가 모두 3 Byte씩 매칭된다는 보장이 없으므로 3 Byte로 나누어떨어지지 않는 경우 '=' 문자로 채우기를 한다. 
즉 Base64로 인코딩 된 데이타에서 '=' 가 보이면 그 것은 다시 원래의 정보로 되돌아 갈때 (디코딩 될때) 아무 것도 없는 것이라는 소리가 된다.
(Base64로 인코딩 정보의 끝에 최대 나올 수 있는 = 의 수는 2개가 된다)

디코딩은 A-Z a-z 0-9 +- 문자를 각각 6 bit의 정보로 바꾸어서 4 단위 (6*4=24  bit) 마다 합쳐서 3 Byte (3*8=24  bit) 로 다시 복원시키면 된다.

이러한 2진수 데이터를 64진수형으로 변환하여 64개의 아스키 코드에 대입하는것이 Base64 알고리즘의 기본이다. 
또한 이런 변환을 하는 이유는 암호화에도 있겠지만 보통은 안전한 64개의 아스키문자열로 변환하여 원할한 데이터를 전송하는데 있다. 
예를 들자면 한국어의 경우 2 Byte 문자열로 그대로 전송할시 문자열의 깨짐이 발생 할 수 있다. 이는 데이터 전송시 원하지 않는 결과이며 
이러한것을 막기 위해 안전한 아스키코드 문자로 변환하여 전송 하는것이다. 
보통 이러한 Base64인코딩 디코딩은 이메일 전송시 많이 사용된다. 하지만 데이터가 기존의 데이터보다 약 30%이상 커진다는 단점이 있다.
 그럼 일반 문자열을 Base64로 인코딩은 어떻게 하면 될까? 답은 다음의 스텝대로 시도하면 된다.
소스의 바이너리 데이타로 부터 3 Byte씩 꺼낸다. 만약 나머지 소스 문자열이 3 Byte가 되지 않는다면 0으로 채운다.
최초  Byte의 MSB를 6 bit씩 4개의 숫자로
각각의 수치를 하단의 표를 토대로 아스키 문자로 변환한다. 다만 실제의 데이터 길이가 3 Byte에 미치지 못한다면 '='로 대체 한다.
이후 데이터가 없어질때까지 1~3을 반복한다.


Posted by SB패밀리

HTTP 압축은 gzip 등의 알고리즘을 사용해서, HTTP 를 통해서 전송되는 데이터의 양을 최고 50%로 압축하는 기술입니다. ASP.NET 으로 만든 페이지들의 사이즈가 커서 Response Time 이 느리거나, 낮은 대역폭 - 이를테면 56K 라인 - 의 사용자들까지도 지원할려고 한다면, 그리고 더 많은 사용자를 지원하기 위해서 서버의 대역폭을 아껴쓰고자 할 때 상당히 유용합니다

HTTP 압축을 위한 상용 모듈도 있습니다만, Windows 2003에 내장된 IIS 6.0에서는 자체적으로도 지원을 합니다. IIS 관리자에서 아주 간단하게 설정을 할 수 있죠. IIS 관리자를 열어서, 트리의 "웹 사이트" 노드에다 마우스 오른쪽 버튼을 클릭하면 나오는 메뉴 중에서 속성을 선택합니다. 그리고 "서비스" 탭을 선택하면 다음과 같은 화면이 나올텐데요. 간단하게 체크만 해주고, IIS를 한번 Restart 시켜주면 바로 HTTP 압축을 사용할 수가 있습니다



하지만, 이렇게만 했을 경우에 ASP.NET 의 aspx 는 압축되어서 내려가지 않습니다. IIS가 압축하는 파일 유형에 포함되어 있지 않기 때문인데요. aspx도 포함을 시키기 위해서는 WIN_DIR\System32\inetsrv\metabase.xml 파일을 편집해야 합니다. 이 파일에서 <IIsCompressionScheme> 노드를 찾아야 합니다
 
<IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/deflate"
  HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
  HcCreateFlags="0"
  HcDoDynamicCompression="TRUE"
  HcDoOnDemandCompression="TRUE"
  HcDoStaticCompression="FALSE"
  HcDynamicCompressionLevel="0"
  HcFileExtensions="htm
   html
   txt"
  HcOnDemandCompLevel="10"
  HcPriority="1"
  HcScriptFileExtensions="asp
   dll
   exe
   aspx"
 >
</IIsCompressionScheme>
<IIsCompressionScheme Location ="/LM/W3SVC/Filters/Compression/gzip"
  HcCompressionDll="%windir%\system32\inetsrv\gzip.dll"
  HcCreateFlags="1"
  HcDoDynamicCompression="TRUE"
  HcDoOnDemandCompression="TRUE"
  HcDoStaticCompression="TRUE"
  HcDynamicCompressionLevel="0"
  HcFileExtensions="htm
   html
   txt"
  HcOnDemandCompLevel="10"
  HcPriority="1"
  HcScriptFileExtensions="asp
   dll
   exe
   aspx"
 >
</IIsCompressionScheme>
 
빨간 색으로 되어 있는 부분처럼, aspx확장자를 추가시켜주면 그때부터 aspx파일에 대해서도 IIS가 HTTP 압축을 수행할 것입니다. (이 파일은 편집하기 위해서 IIS를 잠시 멈춰야 편집을 할 수 있습니다)
 
당연한 거겠지만, 압축을 수행하는 서버와 압축된 컨텐트를 받아서 풀어서 보여줘야 하는 클라이언트 양쪽에 약간씩의 CPU 부담이 있습니다. 하지만 30-50%에 이르는 압축율은 성능 향상과 대역폭 절약이라는 엄청난 이점을 가져오기 때문에, Windows 2003을 사용하는 웹 사이트에서는 충분히 사용할만한 기술인 것 같습니다
Posted by SB패밀리