다음 이미지의 텍스트를 최대한 재구성하고 싶습니다. 까다로운 부분은 이미지에 대해 형태 론적 조작 만 사용하고 싶다는 것입니다.
침식, 팽창, 개폐를 사용해 보았지만 결과는 그리 좋지 않습니다.
이것이 가능합니까?
다음 이미지의 텍스트를 최대한 재구성하고 싶습니다. 까다로운 부분은 이미지에 대해 형태 론적 조작 만 사용하고 싶다는 것입니다.
침식, 팽창, 개폐를 사용해 보았지만 결과는 그리 좋지 않습니다.
이것이 가능합니까?
답변:
형태 적으로 변환 된 이미지 등을 추가 / 빼기하려는 경우 각 픽셀 근처에 몇 개의 신호 픽셀이 있는지, 그 수에 따라 임계 값을 계산할 수 있습니다.
img = imread('http://i.stack.imgur.com/wicpc.png');
n = false(3);n(4) = 1;
s = false(3);s(6) = 1;
w = false(3);w(2) = 1;
e = false(3);e(8) = 1;
%# note that you could convolve with a cross instead
fourNeighbourCount = imerode(img,n) + imerode(img,s) + imerode(img,w) + imerode(img,3) + img;
%# require at least two neighbours
img = fourNeighbourCount > 1;
그런 다음 가운데에 구멍이있는 3x3 마스크로 얽히면 다음과 같은 것을 얻을 수 있습니다.
어떤 이유로 당신이 형태소 연산을 사용하는 것으로 제한된다면, 지향적 닫기 연산의 "투표 방식"을 사용하는 것을 고려할 수 있습니다.
형태학 연산의 한 가지 문제점은 실제로 방향성을 고려하지 않는다는 것입니다. 중앙 픽셀의 경우 이와 같은 이웃
1 0 0
1 1 0
0 1 1
정말 이런 동네와 다르지 않습니다
0 1 0
1 1 0
1 1 0
팽창과 침식이 원하는 방향으로 편향되지 않기 때문에 문제가 발생할 수 있습니다. 따라서 당신이 할 수있는 한 가지는 커널을 사용하여 다음과 같은 가장 적합한 방향 편향 형태 연산을 찾는 것입니다
1 1 0 1 0 0 1 0 0
0 1 0 1 1 0 1 1 0
0 1 1 0 1 1 0 1 1 . . .
이것은 5 x 5 커널에서 더 나을 것이지만 아이디어는 분명하다고 생각합니다. 기본적으로 코너 감지 커널의 개념은 약간 씩 늘어나서 라인 세그먼트 감지 커널이됩니다. 이를 사용하여 가장 적합한 곡선을 찾을 수 있습니다.
0 0 0 1 1
0 0 1 1 0
0 1 1 0 0
0 0 1 1 0
0 0 0 1 1
분명히 이것은 많은 수의 커널로 이어지지 만 기본 아이디어가 효과가 있다고 생각되면 가장 적합한 커널을 단일 패스에서 찾을 수 있도록 기술을 최적화하는 방법이 있습니다.
어쨌든 여러 커널과 일부 논리를 사용하는 경우 (x, y)에서의 각 작업에는 기존의 형태 학적 단계보다 더 많은 계산이 필요합니다.
커널 크기는 입력 크기와 일치해야합니다. 더 큰 커널을 사용하는 대신 "확산"커널을 사용하여 작업 수를 줄일 수 있습니다. 다음 커널은 반경이 1보다 큰 3 x 3 커널입니다.
1 0 0 0 0 0 0
0 0 0 0 0 0 0
1 0 0 1 0 0 0
0 0 0 0 0 0 0
1 0 0 0 0 0 1