[OpenCV] 잡음 제거 – 2. 미디언 필터

이번 글에서는 미디언 필터(median filter)에 대해 알아보겠습니다. 영상의 잡음 중에는 소금과 후추를 뿌린 것같은 소금, 후추 잡음이 있습니다. 잡음의 픽셀값이 0 또는 255이여서 흰색과 검은 소금 후추를 뿌린것 같다하여 생긴 이름입니다. 소금, 후추 잡음을 생성하는 예제 코드는 아래와 같습니다. 미디언 필터는 소금 후추 잡음과 같이 잡음의 픽셀 값이 주변 값과 차이가 클 때 사용하면 효과적인 필터입니다.미디언 필터는 주변 픽셀에 대한 … Read more

[OpenCV] 잡음 제거 – 1. 양방향 필터

이번 글에서는 영상에서 잡음(noise)을 제거하는 방법을 알아보겠습니다. 잡음은 주로 영상 얻는 과정에서 발생하며, 영상에서 원치않는 값이 추가되는 것을 말합니다.잡음이 추가된 영상은 아래와 같습니다. 실제로 얻어지는 영상에 대해 아래와 같은 식으로 표현합니다. 잡음이 생성되는 방식을 잡음 모델이라고 하며, 가장 대표적인 잡음 모델은 가우시안 잡음 모델입니다.잡음을 생성하는 예제 코드는 아래와 같습니다. 잡을을 제거 하기 위해서는 잡음의 픽셀값이 주변 영상의 픽셀값과 … Read more

[OpenCV] 샤프닝 – 선명한 영상 만들기

이번 글에서는 영상을 또렷하고 선명하게 만드는 기법인 샤프닝(sharpening)에 대해 알아보겠습니다. 샤프닝 처리가 된 영상은 아래 영상 중 우측 영상입니다. 이렇게 영상을 선명하게 처리 하려면 엣지 부근의 영상의 명암비가 높아져야 합니다.레나 영상의 모자 부분을 확대해서 보면 아래와 같이 한눈에 봐도 명암비가 높아진 것을 확인할 수 있습니다. 이렇게 샤프닝을 처리하기 위해서는 역설적이게도 블러링된 영상을 사용한다는 것입니다.이전에 블러링 … Read more

[OpenCV] 블러링 – 가우시안 필터

이번 글에서는 가우시안 필터(Gaussian filter)에 대해 알아보겠습니다. 가우시안 필터는 확률론과 통계학에서 가우시안 분포에 대하여, 함수를 근사하여 생성한 필터 마스크를 사용하는 기법입니다.가우시안 분포는 보통 아래와 같이 좌우대칭의 종모양을 가지며, 자연계에서 발생하는 대부분 사건은 가우시안 분포를 따르는 것으로 알려져 있습니다. 가우시안 분포 함수식은 아래와 같습니다. σ(sigma)는 표준편차이며, μ(mu)는 평균을 나타내며, 가우시안 필터는 평균(μ)이 0인 가우시안 분포 함수를 사용합니다. … Read more

[OpenCV] 블러링 – 평균값 필터

이번 글에서는 평균값 필터(mean filter)에 대해 알아보겠습니다. 영상 처리 기법 중에는 영상을 부드럽게 만드는 블러링 기법이 있습니다. 아래 두 이미지 중 두번째 이미지가 블러링 처리된 이미지 입니다. 영상을 부드럽게 처리하는 것은 경계면에서 급격하게 변화하는 곳을 완만하게 처리하는 것입니다. 평균값 필터는 영상을 부드럽게 만드는 블러링에 사용되는 필터 중 하나입니다.평균값 필터는 모든 원소값이 1로 되어있고 원소 개수만큼 나누면 … Read more

[OpenCV] 동전 검출 및 자동 계산기

토이 프로젝트를 진행하면서 기록을 해두고 싶어서 포스트잇 방식으로 씁니다.관련 코드는 아래 링크를 참고하여 만들었습니다.『OpenCV 4로 배우는 컴퓨터 비전과 머신 러닝』 2022.05.07 OpenCV를 공부도 하고 글로도 정리하는데 머리속으로 잘 들어 오지 않아 간단한 토이 프로젝트를 해보기로 함.OpenCV 관련 네이버 카페를 찾아보니 동전을 검출하여 자동으로 계산해 주는 프로젝트가 보여서 시작.참고 네이버 카페 2022.05.09 대략적으로 개발 방향만 정함.  … Read more

[OpenCV] 엠보싱 필터링

이번 글에서는 엠보싱(Embossing) 필터링에 대해 알아보겠습니다. 엠보싱은 인쇄물이나 철판, 종이 등에 표현하고자 하는 것을 오목하거나 볼록하게 만든 것을 말하며, 영상 처리에서 엠보싱 필터링은 이러한 형태로 필터링 한것을 말합니다.아래 이미지는 레나 이미지를 엠보싱 필터링 처리한 이미지 입니다. 엠보싱 필터링은 픽셀 값의 변화가 작은 곳은 회색으로 설정하고, 경계와 같이 픽셀 값의 변화가 큰 곳에는 밝거나 어둡게 설정합니다.엠보싱 필터링에 사용되는 마스크는 … Read more

[OpenCV] 필터링 기본

이번 글에서는 필터링에 대해 기본적인 방법을 알아보겠습니다. 필터(filter)라는 말은 일상에서 보통, ‘원하지 않은 것들을 걸러내고, 원하는 것은 통과시키는 것’을 말합니다.영상에서의 필터링이란, 영상에서 원하지 않은 정보는 걸러내고, 원하는 정보는 통과시키는 작업을 말합니다.영상의 잡음을 제거하는 것을 필터링이라고 할 수 있으며, 샤프하게 만드는 것 또한 필터링이라고도 할 수 있습니다.영상의 필터링은 마스크라는 행렬을 이용하며, 그 모양은 3 x 3 또는 5×5, … Read more

[OpenCV] 안드로이드 Native C++ 사용

이번글에서는 안드로이드 스튜디오에서 Native C++을 사용해보겠습니다. ‘File’ – ‘New’ – ‘New Project’를 눌러 Native C++을 하나 생성해줍니다. 적당한 경로에 적당한 이름으로 만들어줍니다. 생성한 상태에서 바로 실행을 하게되면 아래와 같이 Hello From C++이라는 문구가 나타나게 됩니다. 우선 코드를 입력하기 전에 프로젝트에서 어떤부분에 입력해야하는지 체크부터 해보겠습니다.Navite C++로 프로젝트를 생성하게 되면 아래와 같이 MainActivity에 자동으로 loadLibrary와 stringFromJNI라는 함수가 생성됩니다. myapplication은 라이브러리, stringFromJNI는 … Read more

[OpenCV] Empty Activity에서 안드로이드 NDK 사용

이번 글에서는 안드로이드에서 OpenCV를 연동하기 전, NDK를 사용하는 방법에 대해 알아보겠습니다. 안드로이드 NDK는 C 및 C++와 같은 언어를 사용하여 네이티브 코드로 앱의 일부를 구현할 수 있게 하는 도구 모음입니다. 안드로이드 NDK를 사용할때 JNI라는 단어를 많이 듣게되는데 JNI의 풀네임은 자바 네이티브 인터페이스(Java Native Interface)라고 하며, 자바코드가 C, C++ 또는 어셈블리 같은 다른 언어들로 작성된 라이브러리들을 호출하거나 호출되게 … Read more