FFT와 모아레 제거 프로그램

개발한 것들 2013.01.28 13:24

글 말미에 첨부된 프로그램은 FFT(Fast Fourier Transform)을 이용해서 이미지의 스펙트럼(spectrum)을 확인하고 수정하면서 영상의 다양한 주파수 특성을 테스트할 수 있는 프로그램입니다. 또한 이미지에 나타난 모아레(moire) 패턴을 제거할 수 있는 기능을 포함하고 있습니다.



 

예전에 FFT를 이용해서 모아레를 제거하기 위해 구현해 보았던 것인데, 이번에 포스팅을 하면서 FFT의 개념을 익히고 FFT의 효과를 직접 테스트해 볼 수 있는 일종의 교육용 소프트웨어 형태로 수정해 보았습니다. 자동 모아레 제거 기능은 단순한 방법만 포함시켜서 잘 안되는 경우도 있을 것입니다. 나중에 시간이 되면 밝기보정, 저주파 영역 처리 등 모아레 제거 기능을 보완한 버전을 올려보도록 하겠습니다.

 

푸리에 변환이란?

 

먼저, 푸리에 변환(Fourier Transform, FT)에 대해 간단히 설명을 드리겠습니다. 참고로, FFT는 푸리에 변환을 빠르게 계산할 수 있는 알고리즘을 지칭합니다. 푸리에 변환이란 어떤 시간 도메인(time domain)에서 표현된 신호(signal)를 주파수 도메인(frequency domain)에서의 표현으로 변환해주는 것을 말합니다. 예를 들어, 음파를 생각하면 시간축에 따라서 위아래로 요동치는 파형이 상상될 것입니다. 우리가 흔히 생각하는 방식은 이와같이 time domain에서 표현하는 방식입니다. 이를 frequency domain에서는 신호가 어떤 주파수 성분으로 구성되어 있는지로 표현합니다.

 

아래 그림은 3Hz로 진동하는 신호의 파형(왼쪽 그림) 및 이를 FT를 통해 주파수 도메인으로 변환한 예(오른쪽 그림)를 보여줍니다. 오른쪽 그림에 보면 주파수 3에 해당하는 지점에서 그래프가높은 값을 나타냄을 볼 수 있고 역으로 이를 통해 원래 신호가 3Hz의 강한 주기성을 가짐을 파악할 수 있습니다.

 

그림 출처: http://en.wikipedia.org/wiki/Fourier_transform

 

영상처리에서는 2차원 푸리에 변환을 사용합니다. 이는 영상을 x축 또는 y축 방향으로 따라가면서 픽셀의 밝기 변화를 파형 또는 신호로 보고 주파수 분석을 적용하는 것입니다. 푸리에 변환을 통해 얻은 각 주파수 성분의 강도를 스펙트럼(spectrum)이라고 부르는데 스펙트럼도 이미지처럼 표현이 가능합니다.

 

모아레(Moire)란

 

두 개의 격자 패턴을 서로 겹쳐놓으면 물결 모양의 어떤 새로운 주기성을 가진 패턴이 생성되는데 이를 모아레 패턴이라고 부릅니다. 가장 손쉽게 모아레 패턴을 확인할 수 있는 방법은 여러분이 가진 휴대폰 카메라로 모니터 화면을 찍어보면 됩니다. 아래 그림은 모아래가 포함된 사진(왼쪽)과 이를 첨부한 프로그램을 이용하여 모아레 제거한 사진(오른쪽)을 보여줍니다.

 


 

프로그램 사용법

 

먼저, 첨부된 프로그램을 실행시키면 다음과 같은 GUI 화면이 나옵니다.

 

 

처음의 "Load Image" 버튼을 이용하여 이미지 파일을 선택하면 아래 그림과 같이 입력 영상(왼쪽)과 이를 푸리에 변환한 스펙트럼 영상(오른쪽)을 같이 보여줍니다. 

 


스펙트럼 영상에서 중심 부분은 저주파 영역, 테두리 부분은 고주파 영역을 나타냅니다. 모아레 제거를 위해서는 모아레 패턴에 해당하는 주파수 대역을 스펙트럼에서 제거해야 합니다. 스펙터럼 영상에 마우스를 가져다 대고 드래그(drag)를 하면 아래 그림과 같이 원하는 사각형 영역을 제거할 수 있습니다.

 

 

모아레 제거를 할때 스펙트럼 영상의 중심에 있는 밝은 부분은 건드리면 안됩니다. 이 부분은 영상의 전체적인 밝기 및 원본 영상의 주요 패턴을 나타내는 부분입니다. 모아레 패턴은 비교적 고주파 반복 패턴이기 때문에 위 그림과 같이 테두리 부근에서 밝게 빛나는 부분을 제거해 주면 됩니다. 이와 같이 원하는 주파수 대역을 제거한 후에  "Inverse FFT" 버튼을 눌러서 푸리에 역변환을 하면 아래 그림과 같이 특정 주파수 패턴이 제거된 영상을 얻을 수 있습니다.

 

 

마지막으로, 세번째 "Remove Moire" 버튼을 누르면 위의 모아레 제거 과정을 자동으로 처리하여 복원된 영상을 보여줍니다. 자동 복원이 잘 되지 않을 경우에는 'radius' 파리미터와, 'threshold' 파라미터를 적절히 조절해 보시기 바랍니다. 'radius'를 줄일수록 모아레 제거가 잘되지만 원본 이미지 손상이 큽니다. 'threshold'는 작은 값을 줄수록 모아레 제거는 잘 됩니다 (대신 원본 손상도 큽니다). 


프로그램 다운로드:


fft_tool.zip


by 다크 프로그래머

'개발한 것들' 카테고리의 다른 글

걷는 속도와 비를 맞는 양 - 컴퓨터 시뮬레이션  (46) 2013.06.05
라이브 왜곡 보정 프로그램  (71) 2013.02.13
FFT와 모아레 제거 프로그램  (61) 2013.01.28
오목  (48) 2013.01.28
  • 이전 댓글 더보기
  • BlogIcon 곰돌이 2014.10.16 01:37 신고 ADDR 수정/삭제 답글

    보시면 다크프로그래머님이 사각형으로 짤라놓은 부분하고 아래 이미지와 좀 다르지 않나요? 애래 이미지는 짜를것이 없어보이지만 다크 프로그래머님껏은 대칭적으로 나타나므로 다르다고 느껴지는데여

    • BlogIcon 다크pgmr 2014.10.16 05:57 신고 수정/삭제

      혹시 윗 스펙트럼 이미지는 하얀 peak점들이 나타나고 밑의 스펙트럼 이미지는 그렇지 않다는 점을 말씀하시는 것인지요. 윗 스펙트럼 이미지에 peak들이 나타나는 이유는 윗 원본 이미지에 주기성을 가진 패턴(격자)이 있고 해당 격자패턴의 주기에 해당하는 주파수 대역이 강하게 표현된 것입니다. 하지만 밑의 원본 이미지에는 그러한 주기성이 없기에 스펙트럼 이미지에도 별다른 peak가 나타나지 않습니다.

  • 배움 2014.12.03 19:24 신고 ADDR 수정/삭제 답글

    안녕하세요 FFT 처리 관련 하여 써핑 하다가 올려 놓은 툴을 사용해 봤는데 다른 소스 보다 처리 속도가
    빠른거 같아요 혹시 처리 속도 시간표시 기능 추가 가능 한가요?? 내부 알고리즘은 라이브러리를 사용하신건가요 아님? 직접 코딩 하신건가요??

    • BlogIcon 다크pgmr 2014.12.04 16:17 신고 수정/삭제

      안녕하세요. 특별히 시간표시 기능이 필요한 프로그램이라고는 생각되지 않습니다. opencv에 있는 fft 함수를 이용했으니 참고하시기 바랍니다.

  • 아하하 2015.01.07 16:44 신고 ADDR 수정/삭제 답글

    안녕하세요. 영상처리 관련 전공하고 있는 학생입니다.
    올려주신 자료를 통해 늘 도움을 얻고 있습니다. 항상 감사하고 있습니다.

    최근, 저도 모아레 제거와 관련하여 openCV를 이용한 샘플 테스트를 구현하고 있는데요,
    위의 프로그램을 openCV를 이용하여 구현하셨다고 하여 문의 드리고자 합니다.

    사실 제가 푸리에 변환에 대해서 완벽히 이해하지는 못했지만 openCV를 통한 구현은 할 수 있었습니다.(openCV가 워낙 잘 되어 있으니까요..)
    그런데 역변환 시에 문제가 발생하더라구요..(원본 영상을 푸리에 변환 한 뒤에, 여러가지 연산 과정을 거쳐 출력하는 영상에 대해서, 다시 역으로 연산을 수행하여 푸리에 역변환을 적용하였더니 그저 까만 영상이 나타납니다.)

    혹시 제가 하는 방법이 잘 못 된 방법인가 궁금하여 문의를 드립니다.
    다크님의 프로그램에서 푸리에 변환 후의 출력 영상에서 고주파 영역을 제거(검은색으로 칠)하고 다시 영상을 얻잖아요?
    그렇다면 검은색으로 칠한 영상을 역변환하여 openCV를 통해 변환된 영상을 얻으신 건지요?

    답변 주시면 정말 감사하겠습니다.

    • BlogIcon 다크pgmr 2015.01.08 10:50 신고 수정/삭제

      fft를 하면 복소수가 얻어지고 복소수의 크기(실수부와 허수부의 제곱합의 square root)가 스펙트럼 영상이 됩니다. 스펙트럼 영상을 역변환해서는 안되고 복소수를 역변환해야 원본 영상이 얻어짐을 유념하시기 바랍니다.

  • 아하하 2015.01.08 12:03 신고 ADDR 수정/삭제 답글

    답변 감사합니다.
    그러면 다크님의 프로그램은 사용자로 부터 고주파 성분이 제거된 스펙트럼을 다시 복소수로 만들어서 역변환 한 것인가요?

    • BlogIcon 다크pgmr 2015.01.08 16:39 신고 수정/삭제

      네 그렇습니다. 단, fft phase 정보가 유지되어야 함에 주의하시기 바랍니다.

  • 아하하 2015.01.09 09:24 신고 ADDR 수정/삭제 답글

    아, 그런거로군요!
    답변이 큰 도움이 될 것 같습니다. 감사합니다~! :)

  • BlogIcon 공돌이 2015.06.09 10:05 신고 ADDR 수정/삭제 답글

    안녕하세요? 퓨리에 변환과 라플라스 변환은 둘다 주파수 변환을 통한 이미지의.특징을 파악한다는데있어서 공통적인 부분일것 같습니다 하지만 라플라스 변환은 퓨리에 변환과달리 실수부와 허수부 를 모두 이용하는것으로만 알고 있는데요 이 변환방식을 이용한 영상 처리에는 어떤것이 있는지 궁금합니다. 퓨리에변환은 이미지를 주파수 도메인으로 변환시켜 특징을 알아낼수 있지만 라플라스는 기초가없어서 어떤 응용에 쓰이는지 잘 모르갰네요

    • BlogIcon 다크pgmr 2015.06.10 21:29 신고 수정/삭제

      안녕하세요. 라플라스 변환은 저도 잘 모르는 내용이라 ^^..

    • 소년택이 2016.09.23 10:52 신고 수정/삭제

      @공돌이 님

      라플라스 변환은 비주기-연속신호에 대한 주파수 해석이고, 푸리에 변환은 주기 신호에 대한 주파수 해석입니다. 주기-연속 신호에 대한 해석이 푸리에 급수(FS), 주기-이산신호에 대한 해석이 이산푸리에변환(DFT) 이고 이는 모두 라플라스변환으로부터 유도할 수 있습니다. 공돌이 님이 말씀하신 "푸리에변환" 은 아마 FFT 를 뜻하는거 같은데, FFT 는 DFT 를 고속으로 처리하기 위한 방법입니다.

      FFT 는 실수부만 다룬다고 생각하시는 이유는 아마 대부분의 교재가 FFT 수행 결과를 나타낼 시 Magnitude 만 나타내기 때문인것 같습니다. FFT 는 주파수의 해석이 실수부는 좌우 대칭, 허수부는 180도 대칭인걸 이용해서 계산양을 획기적으로 줄인것 뿐이지 실수부만을 사용하는것은 아닙니다.

      참고로 256 픽셀의 비주기 신호를 어떻게 주기 신호로 다룰 수 있냐... 심지어 -1 픽셀과 256픽셀 부터는 정의도 되어있지 않은데? 라고 물을 수 있는데 -INF 부터 +INF 까지 256 픽셀 주기로 끝 없이 신호가 연속된다고 가정하고 계산합니다.

      한줄 요약 : FFT 는 라플라스 변환의 > 연속신호 버젼의 > 이산신호 버젼의 > 고속화 버젼.

      눈팅하다가, 아는게 나와서 열심히 썼지만... 아무도 안볼꺼야. 아마 난 안되겠지.

    • BlogIcon 다크pgmr 2016.09.23 11:37 신고 수정/삭제

      이렇게 명쾌하게 설명해 주시다니.. 읽다가 감탄을 합니다. 즐겁다는 기분이 이런게 아닌가 싶습니다. ^^ 감사합니다

  • leo0608 2015.09.15 15:15 신고 ADDR 수정/삭제 답글

    안녕하세요~
    모아레 제거 관련 검색하다 오게되었습니다~
    데모 프로그램 굉장히 잘만드셨네요~ㅎㅎㅎ
    저 역시 글을 쓰는 이유가.....질문 드릴 내용이있어서요.....^^;;;
    자동으로 모아레 패턴을 제거하는 부분이 있는데요
    모아레 패턴을 어떻게 검출해서 제거하신 건지 궁금해서 질문드립니다.
    다른 부분은 얼추 했는데........모아레 패턴 자동 검출 및 제거 부분에서 막히네요.......^^;;
    답변이 곤란하시다면....참고할 만한 자료나 논문 추천하주시면 감사하겠습니다~
    읽어 주셔서 감사합니다~ㅎㅎ

    • BlogIcon 다크pgmr 2015.09.15 23:04 신고 수정/삭제

      그냥 간단하게 원점을 제외하고 파워 스펙트럼이 threshold 이상인 값들을 0으로 만든후 역변환을 시켰습니다.

    • leo0608 2015.09.16 09:41 신고 수정/삭제

      아...그렇군요~답변 감사드립니다~~ㅎㅎㅎ
      원점을 제외했다고 하셨는데요....
      혹시 원점을 기준으로 어느정도의 범위를 제외하신 건가요....
      그리고 threshold는 고정으로 두신건지....아니면 어떤 기준으로
      설정하셨는지요......^^;;;;
      저는 원점 기준으로 1/3 정도를 제외하고 threshold는 고정적으로도 해보고 간단하게 전제 픽셀값을 기준으로adaptive하게도 해봤는데.....
      줄무늬가 없는 영상에서도 thrshold 이하는 0으로 만들어서 줄무늬를 만들어 버리는 경우도 있더라고요......^^;;;;;;

    • BlogIcon 다크pgmr 2015.09.16 10:15 신고 수정/삭제

      저도 잘 기억은 안납니다. 파라미터는 이미지마다 달라질 수 있기 때문에 실험을 통해서 조절해 보시면 좋을 것 같습니다.

    • leo0608 2015.09.16 11:41 신고 수정/삭제

      네 답변 감사드립니다~~ㅎㅎ

  • d3outer 2016.02.16 17:20 신고 ADDR 수정/삭제 답글

    깔끔한 포스팅 감사합니다. ㅎㅎ 염치없이 몇 개만 질문드려 봅니다.

    1. 올려주신 프로그램의 푸리에 스펙트럼은 2D-FFT의 절대값인지 궁금합니다.
    2. 이미지의 변위 정보(포스팅하신 백색원 샘플에서, 원의 중심 위치, 또는 좌표)는 푸리에 변환시 위상차 형태만으로 표현되어서, 2D-FFT의 절대값을 취한 정보로는 이미지상의 변위정보를 알 수 없는것인지 궁금합니다.

    처음에는 올려주신 샘플에서 백색원의 위치가 변동하면 2D-FFT의 주기적인 밝기그래프 폭이 변할 줄 알았는데 아니길래(...) 궁금함이 쓰나미처럼 몰려와서 질문드려봅니다. ㅎㅎ

    • BlogIcon 다크pgmr 2016.02.17 01:54 신고 수정/삭제

      2d fft 스펙트럼인 것은 맞습니다. 그리고 2번도 말씀하신 내용처럼 알고 있습니다. translation을 한다고 해서 주파수가 변하는 것은 아니기 때문에 위상차만 변할 것 같습니다.

    • d3outer 2016.02.26 16:53 신고 수정/삭제

      답변을 늦게 봤네요 ㅎㅎ 말씀대로 주파수가 변하는게 아니라 위상이 변하는 거였군요. 답변 감사합니다 ㅎㅎ

  • BlogIcon 길똥고 2016.04.22 18:08 신고 ADDR 수정/삭제 답글

    잘 읽었습니다.
    그런데 저렇게 주기적인 줄무늬를 모아레패턴이라고부르진 않는것 같습니다.

    모아레 패턴은 좀더 복잡한 타원곡선형 간섭무늬를 말하는듯 하며
    푸리에 필터링보다는 광학적 시뮬레이션을 동원해야 겨우 제거가능한듯합니다..

    • BlogIcon 다크pgmr 2016.04.22 18:57 신고 수정/삭제

      어떤 주기성을 갖는 두 패턴을 서로 겹쳤을 때 두 패턴의 상호간섭에 의해서 생성되는, 원래 패턴에는 없던 새로운 패턴을 모아레라고 부릅니다. 모아래 패턴의 형태는 원래 패턴에 따라서, 그리고 그 두 패턴이 어떻게 겹쳐졌는지에 따라서 다양한 형태를 가질 수 있으며 물결무늬, 타원곡선형 간섭무늬 등 다양하게 존재합니다. 예: https://en.wikipedia.org/wiki/File:Moire02.gif

  • BlogIcon 길똥고 2016.04.22 18:10 신고 ADDR 수정/삭제 답글

    위 내용은 반도체영상에사 디펙을 찾을때
    저도 즐겨쓰는 방법입니다.

    반도체 영상들은 저런 기하학적줄무늬 배경에
    비기하학적 디펙들이 많거든요...

    • BlogIcon 다크pgmr 2016.04.22 19:03 신고 수정/삭제

      네, 위 샘플 이미지도 디스플레이 패널의 defect를 검사하기 위한 샘플 이미지들 중 하나입니다.

  • BlogIcon 길똥고 2016.04.22 18:58 신고 ADDR 수정/삭제 답글

    푸우리에변환 관련 게시물은 이게 유일한거 같은데
    혹시 Cepstrum 이나 Phase Correlation같은거
    한번씩 안다뤄 주시겠습니까? ^^;

    • BlogIcon 다크pgmr 2016.04.22 19:15 신고 수정/삭제

      네, 잘은 모르지만 기회가 되면 고려토록 하겠습니다.

  • BlogIcon 길똥고 2016.04.28 10:41 신고 ADDR 수정/삭제 답글

    Homomorphic Filter, Spectral Entropy, Spectral Saliency map, Bilateral Filter 등도 모두 푸리에변환 기반 영상처리 기법들입니다.

    공간(Spatial)도메인 과 푸리에도메인은 서로 가역적이어서
    이론적으로는 공간도메인에서 할수있는 모든것을 푸리에도메인에서도
    할수있고 속도도 빠른데 국내사이트에는 푸리에 영상처리는 거의 언급이 안되는거 같아 안타깝더군요..

  • 기계공돌 2016.08.23 13:23 신고 ADDR 수정/삭제 답글

    저한테 정말 필요한 정보입니다!ㅎ 감사합니다ㅎ 혹시..
    "영상을 x축 또는 y축 방향으로 따라가면서 픽셀의 밝기 변화를 파형 또는 신호로 보고 " 라는 문장에서.. 기본적으로 푸리에 변환은 시간 축의 함수를 주파수 축으로 바꿔 보는 방법인데..원 함수가 시간에 대한 함수가 아니어도 푸리에 변환을 적용해도 무방한가요? 혹시 위 문구에 대한 참고 논문이나 글이 있다면 부탁드리겠습니다..

    • BlogIcon 다크pgmr 2016.08.23 14:36 신고 수정/삭제

      네, 무방합니다. 굳이 문제가 된다면 x축이나 y축을 시간축으로 생각하면 되지 않을까요? 참고문헌이 있는지는 저도 잘 모릅니다. 너무 형식에 얽매일 필요는 없다고 생각합니다.

  • 기계공돌 2016.09.01 15:57 신고 ADDR 수정/삭제 답글

    네^^ 답변 감사드립니다~!

  • BlogIcon 91MS 2017.06.27 13:56 신고 ADDR 수정/삭제 답글

    좋은정보 감사합니다!! 이번에 opencv공부하면서 모아레제거를 만들어보려고 코딩중인데요
    스펙트럼에서 관심영역 설정 후 모아레 패턴 이진화하여서 제거하는데 까진 성공했습니다.
    그래서 그행렬을 다시 역푸리에 했더니 검은화면만 출력되네요...
    댓글에서 말씀해주신 복소수값을 역푸리에해야 올바르게 복원이 된다고 하셨는데요!
    그러면 스펙트럼에서 복소수값으로 어떤식으로 만드는지 여쭤볼수 있을까요??
    함수를 사용하셨는지.. 직접구현하셨는지.. ㅠㅠ 지금 일주일째 헤메고있습니다..

    • BlogIcon 다크pgmr 2017.06.27 23:00 신고 수정/삭제

      이미지를 푸리에 변환한 결과는 원래 복소수입니다. 따라서 그 복소수를 그대로 역변환하면 원래의 이미지가 얻어집니다. 스펙트럼은 이 복소수이 크기일 뿐이므로 스펙터럼을 역변환하면 안되고 복소수를 역변환하면 됩니다.

    • BlogIcon 91MS 2017.06.27 23:03 신고 수정/삭제

      답변감사합니다!!
      근데 원래있던 복소수를 역변환하면
      스펙트럼에서 수정한값들이 적용이 안되있는 상태라 원본이미지 그대로 나와서요..ㅠ 변환한 스펙트럼이미지를 적용시킨 복소수값을 역변환을 해야하는데 적용방법을 모르겠습니다..ㅠ

    • BlogIcon 다크pgmr 2017.06.27 23:05 신고 수정/삭제

      제거한 스펙터럼에 해당하는 원소의 복소수가 원래 a + bi였다면 이 부분들만 0 + 0i로 고친 후에 역변환 하면 되지 않을까요?

    • BlogIcon 91MS 2017.06.27 23:10 신고 수정/삭제

      다크프로그래머님께서는 스펙트럼 영상을 변환하신거 아닌가요??
      아니면 스펙트럼은 보여주는 용도로만 사용하고 그 패턴들의 원소값들을 기억해 저장하고 그 값에 0을 넣어서 역변환을 하신건가요!?

    • BlogIcon 다크pgmr 2017.06.28 00:09 신고 수정/삭제

      네..

    • BlogIcon 91MS 2017.06.28 00:15 신고 수정/삭제

      죄송합니다! 머리를 한대 맞은 기분이네요.. 제가 너무 급하게만 가려고 했던것 같네요! 좀더 생각하며 공부하도록 할게요! 감사합니다^^

    • BlogIcon 다크pgmr 2017.06.28 09:30 신고 수정/삭제

      아닙니다 ^^

  • Prius 2018.03.07 21:56 신고 ADDR 수정/삭제 답글

    안녕하세요 공부하기에 너무 좋은 프로그램을 만들어 주셔서 감사합니다.
    개념을 잡고 공부를하는데 많은 도움이되었습니다.
    초보입니다. ^^;
    한가지 질문이 있다면
    threshold 값을 적용 방식이 원점을 제외하고 파워 스펙트럼이 threshold 이상인 값들을 0으로 하셨다고 했는데 modified Spectrum이미지에서 농도값을 말하는 것인가요?
    어떤 방식으로 비교를해서 농도 값을 0으로 하셨는지 궁금해서 문의 드립니다.
    감사합니다.

    • BlogIcon 다크pgmr 2018.03.07 23:38 신고 수정/삭제

      네.. 말 그대로입니다. 푸리에 스펙트럼 값이 threshold 이상인 값들을 0으로 한 것입니다. 이미지에 fft를 하면 복소수가 나옵니다(입력 이미지와 동일한 크기이며 그 원소값들이 복소수인 2D 배열). 그리고 복소수에 절대값을 씌워서 크기를 구한 것이 푸리에 스펙트럼입니다.. 이 크기가 threshold 이상인 복소수들을 0으로 만든 것입니다.

    • Prius 2018.03.30 17:12 신고 수정/삭제

      답변 감사합니다.^^ 그럼 푸리와 스펙트럼에서 htreshold 이상인 것만 0으로 처리하는 개념이네요
      초보여서 간단히 우선 이해를 하고 있습니다.

  • cha 2018.04.22 12:29 신고 ADDR 수정/삭제 답글

    안녕하세요. 좋은 자료감사합니다. 게시글을 읽고 공부하는 학생인데, 스펙트럼에서 원점을 제외한 고주파성분을 갖는 픽셀위치가 (a,b)라한다면, 원래 영상의 푸리에 변환한 이미지에서 (a,b)부분을 0으로 만들어주고 역변환하신게 맞는지 궁금합니다.

  • nonok 2018.05.03 12:00 신고 ADDR 수정/삭제 답글

    안녕하세요 올려주신 프로그램 유용하게 잘 사용하고잇습니다.
    저도 공부하고자 opencv를 사용해서 같은 내용으로 구현하고 있습니다.
    opencv 3.4를 사용하고 입력받은 이미지에서 dft 함수 결과 값에 R값에 따른 lowpass 필터를 적용하였습니다.
    하지만 dft 함수를 사용해 FFT후 필터를 거치는 동작이 올려주신 프로그램이랑 비교도 안되게 느리게 동작하고 있어 문의드리고자 합니다.
    ' f(x,y)에 (-1)^(x+y)를 곱해준 후 DFT를 수행하면 주파수 영역의 원점이 (M/2, N/2)로 이동한다' 라는 특성을 이용해서 입력 영상에 (-1)^(x+y) 적용 후 필터링이 끝난후 역변환하고 다시 (-1)^(x+y) 곱해줘 원 이미지를 획득했습니다.
    해당 방법을 쓰니 원소 접근을 3번이나 풀로 스캔하다 보니 속도가 많이 느려지는거같은데

    다크프로그래머님께서는 어떤 방법으로 진행하셧는지 조언좀 구하고 싶습니다.
    감사합니다.

    • BlogIcon 다크pgmr 2018.05.03 13:14 신고 수정/삭제

      어떻게 구현했는지 잘 기억은 안나네요. 구현은 워낙 케이스 바이 케이스라.. 혹시 debug 모드로 돌리시는건 아니지요? 아니겠지만 가끔 그런 분들이 있어서요.

  • nonok 2018.05.04 13:45 신고 ADDR 수정/삭제 답글

    픽셀 접근 방식을 포인터로 했더니 빨라졌어요
    좋은 자료 올려주심 다시한번 감사드립니다.

  • 선풍기 2018.06.01 11:34 신고 ADDR 수정/삭제 답글

    안녕하세요 모아레 관련 조사하다 우연히 알게 되어 문의 드립니다.
    영상처리 등을 전공하는 사람이 아닙니다.
    두 가지 패턴이 겹쳐졌을 때 모아레가 얼마나 강하게 발생하는지는 알고자 하는데요
    첫번째 패턴은 디스플레이 화소가 0.05라고 했을 때 이 디스플레이와
    두번째 패턴은 제가 만든 패턴사에 모아레가 얼마나 심한지를 알아서
    모아레가 가장 약한 패턴을 사용하고자 하는데요

    예를 들어 제가 만든 패턴은
    1. 형상 : case1세로 줄무늬 case2원형지그재그배치 등등
    2. 격자 간격(Pitch, mm) : 0.005, 0.01, 0.05, 0.1 등등
    - 참조로 패턴은 Autocad로 만들고 있습니다.
    - 패턴 간격이 워낙 좁아 님이 올려주신 프로그램으로 판단하기가 어렵네요
    - 그리고 제작 만든 패턴 2가지간의 모아레 현상 강도도 알고 싶고요

    올려주신 프로그램으로 판단이 가능할지, 아니면 혹시 알고 계시는 다른 방법이 있으신지 문의 드립니다.
    수고하세요.

    • BlogIcon 다크pgmr 2018.06.01 14:20 신고 수정/삭제

      모아레 현상 강도에 대해서는 저도 이론적으로 아는 바가 없습니다.. 그리고 올린 프로그램으로 강도 측정은 어렵습니다.