C언어를 이용한 푸리에변환(FFT)과 LPF, HPF로 raw 영상변환
- 최초 등록일
- 2009.12.11
- 최종 저작일
- 2009.12
- 13페이지/
압축파일
- 가격 3,000원
![할인쿠폰받기](/images/v4/document/ico_det_coupon.gif)
소개글
Visual Studio C++에서 MFC를 이용하여 raw 형식의 레나(Lena)영상을
고속푸리에변환(FFT)과 저역통과필터(LPF), 고역통과필터(HPF)를 수행한 후의
영상을 보는 과제입니다.
보고서에 레나영상을 FFT한 결과와 LPF에 통과시킨 결과, HPF에 통과시킨결과가
있으며 MFC에서 주요 소스코드가 있습니다.
압축파일에 푸리에변환.zip를 열면 RELEASE폴더 안에 Test.exe 를 실행하면
바로 FFT, IFFT, LPF, HPF 를 Transform 탭에서 적용해볼 수 있습니다.
편의를 위해 Lena영상(512X512)도 있습니다.
목차
1) 배경 이론 설명 및 고찰
2) 원본 영상을 푸리에 변환(FFT)한 결과 영상
3) 주파수 영역에서 저주파 성분을 제거하여 역변환한 결과 영상
4) 주파수 영역에서 고주파 성분을 제거하여 역변환한 결과 영상
5) 소스코드
본문내용
*고속 Fourier 변환(Fast Fourier Transform)
데이터 개수 N에 대한 불연속 Fourier 변환의 계산은 의 계산 횟수를 필요로 한다. 이러한 계산 횟수는 2차원인 영상 데이터에 적용할 때 심각한 문제가 된다. N × N의 크기를 가진 영상은 번의 계산 횟수를 필요로 하기 때문에 속도의 저하를 가져온다. N 길이의 불연속 변환은 N/2의 길이인 두 개의 Fourier 변환의 합이 될 수 있다는 것이 증명되었다. 영상처리에 있어서 이러한 시간절약은 매우 중요하다. FFT의 분해 성질 덕분에 하나의 2차원 연산식을 두 개의 1차원 연산식으로 만들 수 있는데, 영상의 행으로부터 FFT를 계산한 후 열의 FFT를 계산하면 되는 것이다. 아래의 그림은 FFT의 분해성질을 보여주고 있다. 하나의 영상을 행과 열로 나누어 각각 Fourier 변환을 수행하면 주파수 공간 영역으로의 변환이 수행되어진다.
FFT를 구현하는데 있어서 또 하나의 중요한 성질은 FFT알고리즘은 반복적으로 분해하며 수행하므로, 영상의 크기는 반드시 2의 지수승이 되어야만 한다. 영상의 넓이가 2의 지수승이 아닌 경우 영상 데이터 집합에 0을 집어 넣어 2의 지수승으로 바꿔야만 하는데 이를 zero padding 이라고 한다.
*FFT의 주요 동작
FFT 함수는 2개의 메인 함수로 분리된다.
➀ scramble 함수
재귀적인 이산 Fourier 변환 계산의 주기와 대칭을 이루기 위해서는 데이터의 적절한 재배치를 하는 것이 필요한데 이것은 역순의 색인 비트를 배열의 성분으로 계산하며, 데이터는 역순 비트 색인에 의해 가리켜지는 데이터와 교체한다. 간단히 여덟 개의 성분을 가진 배열의 FFT를 예로 보면 주소1(001)에 있는 데이터는 주소 4(100)의 데이터와 교체되며, 색인이 비트의 역순과 같은 모든 데이터는 교체되지 않는다. 다시 말하면 000, 010, 101, 111와 같이 역순으로 비트를 나열해도 똑같은 결과를 가져오는 데이터는 교체되지 않는다.
➁ butterfly 함수
이 함수는 FFT루틴 중에서 가장 중요한 루틴이며 계산 속도를 줄여주는 핵심 루틴을 포함하고 있다.
참고 자료
디지털신호처리(유지상 외, 생능출판사)
압축파일 내 파일목록
푸리에 변환.zip
DSP term project.hwp
Lena(512x512).raw