[컴퓨터 비전] 14 Morphological Operation

이찬영·2024년 2월 28일
0

컴퓨터 비전

목록 보기
13/20
post-thumbnail

[컴퓨터비전 STUDY / KOCW 한동대학교 황성수 교수님 강의 Review]

Introduction

앞장에서 배운 Background subtraction 작업 이후 이미지 후처리 작업의 일환으로, Morphological operation을 수행할 수 있다.

Binary Image를 좀 더 가공하여 완성도를 높이는 결과를 낼 수 있다.


Erosion and dilation

Morphological operation 종류로는 Erosion과 dilation이 있다.

1. Erosion

'침식' 이라는 뜻을 가진 단어로, 이미지상의 물체를 축소하는 역할을 한다.
(교집합의 개념)

아래 그림에서처럼 A 위에서 B가 스캐닝을 하고, B에 있는 점이 갈 수 있는 A 위의 모든 점의 집합이 Erosion의 결과가 된다.

이미지 상의 noise나 narrow feature 등이 사라지게 되는 효과가 있다.

2. Dilation

'확장' 이라는 뜻을 가진 단어로, 이미지 상의 물체를 확대시키는 효과를 가진다.
(합집합의 개념)

아래 그림에서처럼, A 위에서 B가 스캐닝을 하고, A와 B가 겹친 모든 영역이 Dilation의 결과가 된다.

Dilation을 수행하면 알아보기 쉽도록, 글자가 확실히 굵어진 것을 알 수 있다.


다음은 errosion과 dilation을 수행하는 코드이다.

 Mat image, erosion, dilation;
 // 타원형을 10x10으로 설정함
 Mat element = getStructuringElement(MORPH_ELLIPSE, Size(10, 10));	
 //Other options:MORPH_RECT, MORPH_CROSS
 
 image = imread(“water_coins.jpg", 0);
 threshold(image, image, 128, 255, THRESH_BINARY);	// threshold : 128
 
 erode(image, erosion, element);	# erosion 이미지 생성, 객체의 경계를 축소시킴
 dilate(image, dilation, element);	# dilate 수행, 객ㅊ의 경계를 확장시킴
 
 imshow("Binary image", image);
 imshow("Erosion", erosion);
 imshow("Dilation", dilation);

결과는 다음과 같다.


Opening and closing

errosion을 먼저 했냐? 아니면 dilation을 먼저 했냐? 로 Opening과 closing을 나눌 수 있다.

1. Opening

Opening은 errosion을 먼저 수행한 후에 dilation을 수행한 것이다.
(원래 분리되어야 하는데 붙어 있는 경우 적용할 수 있다.)

Opening은 윤곽을 부드럽게 하고, 좁은 지협을 깨뜨리며, 작은 섬과 날카로운 모서리를 제거하는 효과가 있다.

위쪽 화살표에 해당한다.

2. Closing

Closing은 dilation을 먼저 수행한 후에 errosion을 수행한 것이다.
(원래 붙어 있어야 하는데 떨어져 있는 경우 적용할 수 있다.)

Closing은 윤곽을 부드럽게 만들지만 좁은 틈과 길고 얇은 걸프를 융합하고 작은 구멍을 제거하는 효과가 있다.

아래쪽 화살표에 해당한다.


다음은 Opening과 closing을 수행하는 코드이다.

 Mat image, opening, closing, element;
 image = imread(“assets/water_coins.jpg", 0);
 
 threshold(image, image, 128, 255, THRESH_BINARY);	# threshold 값 128
 # 타원형을 크기 7x7로 설정함
 element = getStructuringElement(MORPH_ELLIPSE, Size(7, 7));
 
 morphologyEx(image, closing, MORPH_CLOSE, element);	# closing 연산 수행
 morphologyEx(image, opening, MORPH_OPEN, element);		# opening 연산 수행
 
 imshow("Binary image", image);
 imshow("opening", opening);
 imshow("closing", closing);

결과는 다음과 같다.

profile
자율주행, AI, 클라우드

0개의 댓글