본문 바로가기
카테고리 없음

video image low frequency 저주파 이미지 영상 필터링 기술 효과

by 구름갈대호수 2022. 3. 26.

제시하며 영상에 적용한 후의 결과를 설명한다.


저주파 필터를 이용한 영상 필터링


첫 번째 예제에서 아주 기본적인 저주파 필터를 제시한다. 6장의 소개 부분에서 저주파 필터의 목적은 영상 변화의 진폭을 감소하기 위한 것이라고 배웠다. 이런 표를 달성하는 한 가지 간단한 방법은 각 화소를 주변 화소값의 평균으로 대치한다. 이렇게 한다면 빠른 명암도 변화는 부드럽게 돼 점진적으로 변화한다.


cv::blur 함수의 목적은 각 화소를 직사각형 이웃 주변으로 계산한 평균 화소값으로 대치해 영상을 부드럽게 한다. 저주파 필터는 다음과 같이 적용한다.

cv::blur (image, result, cv::Size (5,5));

필터 유형은 또한 박스 필터라고 한다. 여기서 필터의 효과를 더욱 두드러지게 하기 위한 5×5 필터를 사용해 적용한다. 다음 영상에 필터를 적용한다.

Original Image

low frequency filter output
low frequency filter graph


결과는 다음과 같다.

3차원 cv::Mat 인스턴스를 반환한다. 이 행렬은 (256)×3 요소를 갖는데, 1,600만 개 이상의 항목을 나타낸다. 대부분 애플리케이션에서 큰 히스토그램을 계산하기 전에 컬러 개수를 감축하는 것이 더 좋다(2장 참조), 대신 너무 많은 메모리를 소모하지 않게 큰 희소 행렬(즉, 매우 적은 넌제로 요소가 있는 행렬)을 표현하기 위해 설계된 cv:: SparseMat 데이터 구조도 사용할 수 있다. calcHist 함수는 하나의 행렬을 반환하는 버전이 있다. 그러므로 CV:: SparseMatrix를 사용하기 위한 이전 메소드를 수정하는 것이 간단하다.

cv:: SparseMat getSparseHistogram (const cv:: Mat &image) {

CV:: SparseMat hist(3, histSize, CV_32F);// 히스토그램 계산cv:: calcHist(&image, 1, // 단일 영상의 히스토그램만channels, // 대상 채널 CV :: Mat(), // 마스크 사용하지 않음hist,// 결과 히스토그램3, // 3차원 히스토그램histSize, // 빈도수 ranges// 화소값 범위);return hist;

3차원 영상 histogram image resize 기술


영상 내 특정 내용을 감지 위한 히스토그램 역투영 예제에서 특정 영상 내용을 감지하기 위한 컬러 히스토그램을 사용한다.

필터링은 신호처리와 영상처리의 기본 작업 중 하나다. 영상의 특정 부분을 선택적으로 추출하기 위한 과정으로, 해당 애플리케이션의 컨텍스트 안에서 중요한 정보를 전달하기 위한 방법이다. 필터링은 영상의 잡음을 제거하고, 관심 있는 시각 특징을 추출하고, 영상 재샘플링에 사용한다. 필터링은 일반적인 신호와 시스템 이론에 뿌리를 둔다. 여기서는 그 이론을 상세하게 다루지 않는다. 6장에서는 필터링과 관계있는 중요한 개념의 일부를 제시하고, 영상처리 애플리케이션에서 필터를 사용할 수 있는 방법을 보여준다. 일단 먼저 주파수영역 분석 개념에 대한 간략한 설명부터 시작한다.

 

영상의 image distribution 분석 방식의 효과


영상을 보면 서로 다른 그레이레벨(또는 컬러)이 영상에 분포돼 있음을 살펴볼 수 있다. 영상 간에 차이가 있는데, 그 이유는 영상별로 서로 다른 그레이 레벨 분포를 갖기 때문이다. 이외에 영상을 분석할 수 있다는 조건에서는 다른 관점이 존재한다. 영상에 존재하는 그레이레벨 변화를 볼 수 있다. 다른 영상 중에 있는 일부 영상은 거의 일정한 명암도를 갖는 큰 영역(예를 들어 푸른 하늘)인 반면 영상에서 그레이레벨의 명암도가 급격히 달라진다(예를 들어 많고 작은 객체가 바쁘게 붐비는 장면). 그러므로 영상의 이런 변화에 대한 주기를 관찰하는 것이 영상을 특성화하는 다른 방법이다. 이 관점은 주파수 영역이라고 하며, 영상 자체의 그레이레벨 분포 관찰에 의한 영상 특성화는 공간 영역이라고 한다.

주파수 영역 분석은 영상을 가장 낮은 저주파에서 가장 높은 주파수까지의 주파수 내용으로 분해한다. 낮은 저주파는 영상 명암도가 느리게 변하는 영역에 대응하고, 높은 고주파는 명암도 간에 급격하게 변화하는 부분에서 만들어진다. 푸리에 변환이나 코사인 변환 같은 몇 가지 잘 알려진 변환이 있는데, 영상의 주파수 내용을 명시적으로 보여줄 때 사용한다. 영상은 2차원 공간이므로, 수직주파수(수직 방향의 변화)와 수평 주파수(수평 방향의 변화)로 구성한다.

주파수 영역 분석 관점에서 필터는 영상의 다른 주파수 대역을 차단(또는 감소)할 동안 특정 주파수 대역을 증폭하는 작업이다. 그러므로 저주파 필터는 상호적으로 영상의 고주파 컴포넌트를 제거하는 필터이고, 고주파 필터는 저주파컴포넌트를 제거한다. 6장에서는 영상처리에서 자주 사용하는 몇 가지 필터를 적용한다.

 

 

object detection moving average algorithm 객체를 찾기 위한 평균 이동 알고리즘 사용


SET 시트에 나는 하는 법. 한 신 위를 갖고 잉싱 내용을 말 한 치는 요한다. 정 내의 제 위지 내 지으로 인고 있다고 하면 을 쉽는 의 학한 위치를 찾는 내 사용할 수 있다. 최고들는 주된 반의 학들을 최대화한 원이다. 그러므로 초기 위지부터 시시반복으로 이동하는 파이 학한 객체 위치를 찾을 수 있이이 한다. 이는 또는 동 알고리즘으로 수행한다.

이미지를 변형하기를 원한다고 가정하자. 여기서는 다음 컬러 그림(킬리로 된 을 SE : 로드 될트를 방문하리)에 있는 원숭이 얼굴이다.

 

연결하는 방법을 이해하거나, 제대로 실행하기 위한 클래스를 호출하는 메소드를 찾을 필요가 없다. 컨트롤러 클래스는 모두 처리한다. 단지 필요한 건 컨트롤러 클래스의 인스턴스를 생성하는 것뿐이다.

컨트롤러에 정의된 세터와 게터는 알고리즘을 배포할 때 필요하다고 생각하는 것 중 하나다. 이 메소드는 여러 클래스 중 대응하는 클래스를 쉽게 호출한다. 다시 말하면 여기에서 다룬 예제는 단일 클래스 알고리즘만 포함하는 간단한 예제였다. 그러나 대부분 사례에서는 여러 가지 클래스 인스턴스가 관여한다. 그러므로 컨트롤러의 역할은 적합한 클래스에 대한 요청을 다시 전달하되 이 클래스들에 대한 인터페이스를 단순화시킨다. 간단한 예로 setTargetColor와 getTargetColor 메소드를 고려해보자. 관심 컬러를 설정하고 가져오기 위한 uchar를 사용한다. 이 메소드들은 애플리케이션 프로그래머가 cv:: Vec3b 클래스에 대해 알아야 할 필요성을 없애 준다.

어떤 경우에는 애플리케이션 프로그래머가 제공하는 데이터를 또한 컨트롤러가 준비한다. 이에 대한 에로는 주어진 파일명에 대응하는 영상을 메모리에 올리는 setInputImage 메소드에서 처리했던 사례를 들 수 있다. 이 메소드는 올리는 작업이 성공했느냐 아니냐(어떤 건 상황을 처리하기 위한 예외 상황을 역시 던졌을 수 있다)에 따른 참과 거짓을 반환한다.

마지막으로 process 메소드는 알고리즘을 실행하는 메소드 중 하나다. 이 메소드는 결과를 반환하지 않고, 최근 처리를 수행했던 결과를 가져오기 위한 다른 메소드를 반드시 호출해야 한다.

자, 이 컨트롤러를 사용해 아주 기본적인 대화상자 기반 애플리케이션을 만들려면 그냥 ColorDetectController 멤버 변수를 대화상자 클래스(여기선 colordetect 임)에 추가한다. MFC 대화상자의 경우에 Open 버튼은 다음과 같다.

// 'Open' 버튼에 대한 메소드 콜백 void OnOpen()

{

// bmp 또는 jpg 파일 타입을 선택하기 위한 MFC 위젯 CFileDialog dlg (TRUE, T("*.bmp"), NULL,

영상에서 객체를 감지하기 위해 HSV 컬러 공간을 사용한다. 영상의 일부 내용을 감지하기 위해 사용할 수 있는 다양한 대체 해법 중 하나다.

 

객체를 찾기 위한 평균 이동 알고리즘 사용


히스토그램 역투영 결과는 확률 맵으로, 지정한 영상 위치를 갖고 영상 내용을발견하기 위한 확률을 표현한다. 영상 내의 객체 위치를 대략적으로 알고 있다.고 가정한다면 확률 맵은 객체의 정확한 위치를 찾는 데 사용할 수 있다. 최고확률은 지정된 창 안의 확률을 최대화한 것이다. 그러므로 초기 위치부터 시작해 반복적으로 이동하는 과정에서 정확한 객체 위치를 찾을 수 있어야 한다.이것은 평균 이동 알고리즘으로 수행한다.


관심 영역을 식별하길 원한다고 가정하자. 여기서는 다음 컬러 그림(컬러로 된영상을 보려면 이 책의 웹사이트를 방문하라)에 있는 원숭이 얼굴이다.

 

 

이웃 접근으로 영상 조회


영상처리에서 이웃 화소값에 기반을 둔 각 화소 위치에 있는 값을 갖고 계산하는 처리 함수가 대부분이다. 이웃이 이전 행과 다음 행의 화소를 포함하는 경우동시에 영상의 여러 행을 조회해야 한다. 이번 예제에서 어떻게 다루는지 살펴보자.

준비

예제를 설명하기 위해 영상을 선명하게 하는 처리 함수를 적용한다. 라플라시안연산자(6장에 다룬다)에 기반을 둔다. 영상처리 결과가 잘 알려져 있는데, 영상에라플라시안을 거친 결과를 빼면 영상 에지가 두드러지게 돼 선명한 영상이 된다. 선명화 연산자는 다음과 같이 계산한다.

sharpened_pixel= 5* current-left-right-up-down;

여기서 left는 바로 현재 한 행의 왼쪽에 있는 화소이고, up은 이전 줄의가운데에 대응하는 화소다. 55

이번에는 내부 공간에서 처리할 수 없고, 사용자가 결과 영상을 제공할 필요가있다. 영상 조회는 세 가지 포인터로 수행하는데, 현재 행의 포인터, 위 행의포인터, 아래 행의 포인터다. 또한 각 화소 계산은 이웃에 대한 접근이 필요하므로 영상의 처음과 마지막 행에 있는 화소값뿐만 아니라 마찬가지로 첫 번째와마지막 열의 화소에 대한 각 화소값을 갖고 계산할 수 없다. 반복문은 다음과같다.

댓글