이진 영상의 모폴로지는 기본적인 침식과 팽창 연산만 알고 있어도 충분하다. 그러나 그레이스케일 또는 컬러 영상의 경우, 유용한 모폴로지 연산들이 더 존재한다. 모폴로지 연산들은 모두 하나의 함수 Cv.MorphologyEx()를 이용한다.
public static void MorphologyEx(CvArr src, CvArr dst, CvArr temp, IplConvKernel element, MorphologyOperation operation, int iterations); |
Cv.MorphologyEx() 함수는 두개의 새로운 매개변수를 더 받는다. 하나는 temp 배열이고, 다른 하나는 operation이다. Temp 배열이 선택적으로 사용된다, temp 배열이 사용되는 경우, 이 배열은 입력 영상과동일한 크기여야 한다.
Operation 인자에 지정할 수 있는 값
Operation값 | 모폴로지 연산 | Temp 영상의 필요 유무 |
MorphologyOperation.Open | 열기 | 불필요 |
MorphologyOperation.Close | 닫기 | 불필요 |
MorphologyOperation.Gradient | 모폴로지 그래디언트 | 항상필요 |
MorphologyOperation.Tophat | 탑 - 햇 | 바꿔치기 전용(src = dst) |
MorphologyOperation.Blackhat | 블랙 - 햇 | 바꿔치기 전용(src = dst) |
열기와 닫기 연산
열기와 닫기 연산은 침식과 팽창 연산을 조합하여 사용함으로써 이루어진다. 열기 연산의 경우, 침식 연산을 수행한 후 팽창 연산을 수행한다. 열기 연산은 종종 이진 영상에서 독립된 영역들의 개수를 세기 위해서 사용된다. 예를 들어, 현미경으로 관찰한 세포 영상을 임계값을 이용하여 이진화한 후, 열기 연산을 수행하여 가까이 붙어 있는 세포들을 서로 떨어뜨리려 놓고 나서 세포의 수를 세곤 한다. 닫기 연산은 팽창을 먼저 하고 침식 연산을 수행한다. 닫기 연산은 연결된 구성 요소 알고리즘 등에서 잡음에 의한 원치 않은 분할을 최소한으로 줄이고자 사용한다. 연결된 구성 요소 레이블링을 수행하기 위해 보통 침식 또는 닫기 연산을 수행하여 잡음을 먼저 제거하고, 열기 연산을 수행하여 다시 가까이 인접한 큰 영역들을 합쳐준다. 열기 또는 닫기 연산의 결과는 침식 또는 팽창 연산의 결과와 유사하지만, 열기 및 닫기 연산이 연결된 영역을 보다 정확하게 보존해준다.
IplImage tempimage = src.Clone();
IplConvKernel element = Cv.CreateStructuringElementEx(3,3, 2, 2, ElementShape.Rect, null);
Cv.MorphologyEx(src, dst, tempimage, element, MorphologyOperation.Open, 3); |
모폴로지 열기 연산의 결과, 작은 크기의 밝은 영역은 사라지고, 남아 있는 밝은 역역의 크기는 유지된채 고립되어 있다.
모폴로지 닫기 연산의 결과, 밝은 영역들이 서로 합쳐졌지만 기본 크기는 유지하고 있다.
Iterations에 2를 전달하여 닫기 연산을 두 번 수행하는 것은 팽창-침식-팽창-침식 연산을 수행하는 것 같은 효과를 나타낸다. 그러나 이러한 연산은 그다지 유용하지 않다. 보통의 경우, 팽창-팽창-침식-침식 같은 연산을 원할 것이다. 팽창-팽창-침식-침식과 같은 방식으로 모폴로지 연산을 수행해야 팽창-침식을 한 번 수행하는 것보다 더 큰 잡을을 제거하는 효과가 있다.
모폴로지 그래디언트
이 연산을 이진 영상에 적용하면 영역의 외곽선만 남기는 효과가 있다.
Gradient(src) = dilate(src) - erdoe(src) |
모폴로지 그래디언트 연산의 결과. 주변부 엣지가 밝게 표현된다.
그래이스케일 영상에 대한 모폴로지 그래디언트 연산 결과는 영상에서 밝기값 변화량의 정도를 알려준다. 모폴로지 그래디언트는 밝은 영역 주위를 고립시켜서 이를 하나의 객체로써 다룰 수 있도록 해준다. 영역의 완전한 외곽선은 확정된 영역으로부터 수축된 영역을 빼는 차연산을 통해 쉽게 구할 수 있다. 이는 객체의 그래디언트를 계산 하는 것과는 다르다.(그래디언트 관한 소벨, 샤르 연산)
탑-햇 연산과 블랙-햇 연산
이들 연산은 주변보다 밝거나 어두운 영역을 고립시키는 효과가 있기 때문에 특정 객체 내부에서 밝기 변화가 두드러진 부분을 찾아내기 위해 사용된다. 예를 들어, 생체조직 또는 세포를 촬영한 현미경 영상을 다룰 때 사용되기도 한다.
TopHat(src) = src - open(src) BlackHat(src) = close(src) - src |
탑-햇 연산은 입력 영상에서 열기 연산이 수행된 영상을 빼는 연산이다. 열기 연산은 영상에서 밝기값이 크게 튀는 작은 덩어리를 제거하는 효과가 있다. 그러므로 src에서open(src)를 빼게 되면 결과적으로 원본 src영상에서 주변보다 밝았던 부분만 남아서 강조되어 보인다. 이러한 효과는 커널의 크기에 의존적이다. 이와 반대로 블랙-햇 연산은 원본 영상에서 주변보다 어두운 영역만 강조한다.
모폴로지 탑-햇 연산의 결과. 주변보다 밝은 영역들이 강조되었다.
모폴로지 블랙-햇 연산 결과. 주변보다 어두운 영역들이 강조되었다.
'Programing > OpenCV' 카테고리의 다른 글
제스쳐 인식 (0) | 2016.11.30 |
---|---|
플러드필 (0) | 2016.11.30 |
영상 모폴로지 자체 커널 만들기 (0) | 2016.11.30 |
영상 모폴로지 (0) | 2016.11.30 |
스무딩(블러링) (0) | 2016.11.30 |