모폴로지 기법:
모폴로지? => 영상을 형태학적 관점에서 보고 접근하는 방법이라고한다.
영상내에 존재하는 특정 객체의 형태를 변형시키는 용도로 사용되는 영상처리기법
이진영상처리에 주로 사용됨
집합의 포함관계,이동,대칭,여집합,차집합 등을 이용함
영상에서 잡음을 제거하거나 ,영상에서 객체의 모양을 기술하는 용도로 사용됨
예: 모폴로지의 대표적인 예로 침식과 팽창연산이있음
침식연산: 필터의 크기 및 사용 횟수에 따라 작은 덩어리의 객체들을 사라지게 할수있다
침식연산-> 깍아나간다는 뜻
정해진 영역 내에서 가장 작은 값을 픽셀 중심부의 값으로 바꾸는 최소값 필터의 역할을 한다
이진 영상에서 객체영역을 흰색으로 볼대 이들 영역이 줄고 검은색 영역이 늘어남
그레이 영상에서 밝은 영역이 줄고 어두운 영역이 늘어나는 쪽으로 연산결과가 출력됨
erode 함수를 이용
팽창연산: 필터의 크기 및 사용 횟수에 따라 객체 내부에 있는 작은 구멍들을 사라지게 할수있다
팽창연산은 침식연산과 반대로 영역을 넓혀가는 연산이며 최대값 필터의역활을 한다
dilate 함수이용
침식과 팽창
침식연산은 영상내에서 객체 영역을 깍아내는 효과를 나타냄
팽창연산은 객체 영역을 확장시키는 결과를 만듬
각 화소 주변의 화소 집합에서 정의된 구조 요소로 연산
주어진 화소에 적용한후를 생각해보면 현재 집합 내의 화소 위치와 함께 구조 요소의 고정점이 정렬됬으며,구조 요소와 교집한 후의 모든 화소를 포함한다
침식: 정의한 화소 집합에서 찾은 최소 화소값을 현재 화소로 대치
팽창: 보수 연산자로,정의한 화소 집합에서 찾은 최대 화소값을 현재 화소로 교체
입력 이진 영상 : 오직 검은색과 흰색 화소를 포함하므로,각 화소는 흰색이나 검은 화소 중 하나로 교체됨
배경과 전경객체에서 침식과 팽창을 쉽게 체감할수있음:
침식인 경우 구조 요소가 화소 위치에서 배경을 건드렸을 경우 바꿔주면 화소를 배경으로 보내버린다
팽창인경우 배경화소로 구성된 구조 요소가 전경 객체를 건드리면 이 화소에 흰색 값을 할당한다
(침식된 영상이라 함은 객체의 크기가 감소된것)
팽창인경우 구멍의 일부가 채워지지만 침식인경우 작은구명은 제거된다
기본적으로 빈행렬로 얻는다 3 x 3 행렬임 세번째 인자인 Mat()에서 얻는다
이 인자의 행렬차수를 높이면 더 파격적인 효과를 얻는다
또한 erode 함수는 반복시킬수있는 침식횟수를 지정할수도있다
배경/전경에 대한 개념으로 봤을때 구조요소로 침식시킨 전경 객체는 영상의 배경 부분을 팽창한것으로 볼수있으므로 공식적으로는 다음과 같다고 볼수있다
* 영상의 침식은 보수 영상을 팽창시킨 결과의 보수와 동일
* 영상의 팽창은 보수 영상을 침식시킨 결과의 보수와 동일
모폴로지기법을 이용한 영상 열림과 닫힘
열기와 닫기 연산은 침식과 팽창연산을 이용하여 구현할수있는 연산이다
열기 연산은 일반적으로 객체의 외곽선을 부드럽게만들어주면 가늘게 돌출한 부위를 제거해주는 역할,잡음을 제거하는 역할을 한다
닫기 연산은 가늘게 패인 부분을 채워주는 역할을 한다
영상을 이진화한후 레이블링을 수행하면 잡음으로 인해 원래 객체보다 많은 레이블의 개수가 생성됨
레이블링 전 이진 영상에 열기 연산을 수행하면 1,2 픽셀짜리 잡음이 제거되어 레이블 개수가 좀 더 정상에 가까워짐
레이블링?
인접한 화소에 모두 같은 번호를 붙이고 연결되지 않은 다른 성분에는 다른 번호를 붙이는 일
레이블링 :
고수준 모폴로지 를 적용하려면 morphologyEx 함수를 이용
정의:
닫힘은 침식한 영상의 팽창으로 정의(침식->팽창)
열림은 팽창한 영상의 침식으로 정의(팽창->침식)
침식 을 계산 :
//원 영상을 팽창
cv::dilate(image,result,cv::Mat());
// 팽창된 영상에 대한 침식
cv::erode(result,result,cv::Mat());
열림 필터는 두 함수의 호출 순서를 반대로 해서 얻는다
닫힘 필터는 인접한 여러 객체와 함께 연결됨
닫힘 필터는 완전히 구조 요소를 포함하기엔 매우 작은 임의의 홀이나 간격을 제거함
열림필터는 장면 내의 여러 작은 객체를 제거
열림필터는 영상잡음으로 인한 작은 덩어리를 제거,
닫힘필터는 잘못된 조각인 객체를 작은부분으로 함께 연결시킨다
따라서 순서대로 두 필터를 사용하는것이 좋음
* 잡음 필터링을 우선적으로 하길 원한다면 닫힘 전에 열림 연산을 사용할수있다, 단 몇가지 조각난 객체가 제거된 채로 남음
형태학 필터를 이용한 에지와 코너 감지
그레이레벨 영상에 대한 형태학 연산자의 효과를 이해하는데 해발에 대응하는 그레이레벨로 된 위상적 입체감이 있는 영상을 고려하는것이 좋다
밝은 영역은 산에 대응,어두운 영역은 지형안의 계속에 대응
에지 : 어두운 화소와 밝은 화소와 밝은 화소사이의 급격한 변화에 대응하되 가파른 절벽으로 묘사할수있음
침식 연산자를 이런 지형에 적용하면 그물 결과는 특정 지역내의 각 화소를 낮은 값으로 대치하므로,
지형의 높이를 낮추게 된다
즉 절벽은 계곡위에 있는 지형이 된다
에지를 감지하는 방법:
침식된 영상과 팽창된 영상간의 차이를 계산하여 얻을수있음
두 변환 영상은 에지 위치에 주로 차이가있기 때문에 그 차이로 인해 영상 에지가 두드러짐
코너 감지 방법:
네가지 구조 요소를 사용
코너 연산자는 OpenCV 에서 구현되지않음
여러모양의 구조 요소를 정의하고 조합하는 방법이있음
아이디어: 두개의 서로 다른 구조 요소와, 팽창과 침식에 의한 영상 닫힘에 있다
이요소는 에지가 바로 변하는 부분을 선택하지만, 해당 효과로 인해 코너 점의 에지에 영향을 끼친다.
비대칭 닫힘 연산에 대한 영향을 잘 이해하기 위해서는 단일 흰색 사각형으로 만든 다음 영상을 사용해보면
첫번째 사각형은 원 영상
십자가 모양의 구조 요소로 팽창했을때 코너점을 제외하며 사각형 에진ㄴ 확장
십자가 모양이 정사각형을 건드리지 않는다
이에 대한 결과는 중간에 있는 사각형임
팽창 이미지는 구조 요소로 침식 (다이아몬드 모양)된다.
침식은 원 위치에 대부분 에지가 있지만 코너에 가해도 더 이상 팽창되지 않는다
마지막 사각형은 코너를 잃은것이다.
동일한 절차로 X 모양과 사각형 모양 구조 요소를 갖고 반복한다.
이전 버전을 회전한 두 요소는 결과로 45도 방향에서 코너를 잡는다
끝느오 두 결과의 차이로 인해 코너 특징을 추출함
워터쉐드를 이용한 영상 분할
: 영상을 빨리 분할해 동일한 영역으로 만들기 위해 사용하는 영상처리 알고리즘이다.
분할의 목적은 영상을 여러 영역으로 나누는것이다.
밝기의 불연속성에 기반하여 영역사이의 경계를 찾음으로써 나누는 방법과 명암도나 색체 같은 화소 성질의 분포에 기반한 threshold 를 통하여 수행됨
그중에서 영역들을 직접 찾는것에 기반한 분할 기법의 특징
* 분할은 전체적이여야한다(각 화소는 한 영역안에 있어야함)
* 영역내의 점들은 연결되어야한다
*영역들은 분리 되어 겹쳐 있지 않아야한다.
*분할된 영역내의 모든 화소들에 의하여 꼭 만족되어야한다
- 영상이 위상적 입체감을 보여준다는 아이디어에 따른다.
- 동일한 영역은 상대적으로 급격한 에지로 기술된 평탄한 분지에 대응
- 워터쉐드 알고리즘의 원래 버전이 영상을 과도하게 분할해 여러개의 작은 영역을 만든다
-영상분할에 대한 정의를 유도하는 미리 정의된 마커 집합을 사용
- 워터쉐드 분할은 watershed함수를 사용해 얻는다
32비트 부호에 있는 정수 마커 영상으로,레이블을 대표하는 넌제로 화소로 구성
영상내의 확실히 특정 영역에 속하는것으로 알려진 일부 화소를 마크
초기 레이블링에서 워터쉐드 알고리즘이 다른 화소가 속할 영역을 결정