열림과 닫힘
시간 제한1초메모리 제한128 MB
각 테스트 케이스에서 이진 영상을 작은 구조 요소로 열기와 닫기 연산한 결과를 출력한다.
문제
형태학적 연산(morphological operation)은 영역의 모양을 표현하고 기술하기 위해 영상의 구성 요소를 추출하는 도구이다. 대표적인 두 연산이 열림(opening) 과 닫힘(closing) 이다. 두 연산을 정의하기에 앞서, 먼저 영상을 어떻게 표현하는지 정한다.
개의 행과 개의 열로 이루어진 이진 영상 는 픽셀 값이 인 좌표 (, )들의 집합으로 나타낸다. 왼쪽 위 모서리의 좌표는 이다. 또한 구조 요소(structuring element) 라고 부르는 이진 영상 가 주어지는데, 는 개의 행과 개의 열을 가지며 같은 방식으로 집합으로 나타내되 왼쪽 위 픽셀의 좌표가 이다(따라서 중심은 이다).
기본이 되는 두 연산은 팽창(dilation) 과 침식(erosion) 이다. 에 의한 의 팽창은 다음과 같이 정의한다.
A (+) B = { a + b | a in A, b in B } ∩ Z
여기서 좌표의 덧셈은 성분별로 이루어지고, 는 , 인 좌표 들의 집합이다. 에 의한 의 침식은 다음과 같이 정의한다.
A (-) B = { w | 모든 b in B 에 대하여 w + b in A }
이를 이용하여 에 의한 의 열림 은
A o B = (A (-) B) (+) B
이고, 에 의한 의 닫힘 은
A . B = (A (+) B) (-) B
이다. 대략적으로, 열림은 전체적인 모양을 유지하면서 작은 세부를 제거하고, 닫힘은 전체적인 모양을 유지하면서 작은 틈을 메운다.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 케이스는 공백으로 구분된 세 정수 , , 가 있는 줄로 시작한다 (, ). 이어지는 개의 줄에는 영상 의 각 행이 주어지며, 각 줄은 .(0) 또는 *(1)인 개의 문자로 이루어진다. 그다음 개의 줄에는 같은 방식으로 구조 요소 가 주어진다. 입력은 0 0 0인 줄로 끝난다.
출력
각 케이스마다 케이스 번호를 한 줄에 Case x 형식으로 출력하고 빈 줄을 하나 출력한다. 이어서 열림 의 결과 영상을 출력하고, 빈 줄을 하나 출력한 뒤, 닫힘 의 결과 영상을 출력한다. 결과 영상의 형식은 입력 영상과 같다. 서로 다른 케이스의 출력 사이에는 등호(=) 75개로 이루어진 줄을 하나 넣어 구분한다(마지막 케이스 뒤에는 이 구분선을 출력하지 않는다).