4

작업은 문서의 이미지를 찍고 다른 '섹션'을 둘러싼 직선을 활용하여 추가 파싱을 위해 이미지를 여러 문서로 분리합니다. 다른 '섹션'의 크기는 페이지마다 완전히 다릅니다 (우리는 수천 페이지를 다루고 있습니다). 문서가 배치되는 방법문서의 이미지에서 가장자리를 감지하고 섹션을 개별 이미지로 자르는 방법은 무엇입니까?

예 :

Example Doc

이미지 분석/조작이 나에게 완전히 새로운 여기에 이러한 이미지 중 하나가 같은 모습의 이미지입니다. 지금까지 Scikit 이미지 가장자리 감지 알고리즘을 사용하여 '상자'를 찾고 이미지를 자르려는 '좌표'를 사용하려고했습니다. 그러나 내가 시도한 두 가지 알고리즘 (Canny, Hough)은 높은 민감도에서 텍스트의 줄을 '가장자리'로 선택하고 낮은 민감도에서 원하는 줄을 선택하지 않습니다. 박스를 직접 감지하기 위해 사용자 정의와 저레벨을 쓸 수도 있지만, 이것이 해결 된 문제라고 가정해야합니다.

내 접근 방식이 올바른 방향으로 가고 있습니까? 고맙습니다!

+0

당신이뿐만 아니라 진짜 입력 이미지가 있습니까? 당신이 보여주는 것은 그 개념을 설명하는 데 유용합니다. 하지만 실제로는 실제 입력과 함께 작업해야합니다. –

+1

구문 분석 할 문서가 다양한 소스에서 제공되었지만 실제 입력 이미지가 추가되었습니다. 형식의 전체 형식은 항상 비슷할 것으로 예상되지만 줄 크기, 언어, 텍스트 형식 등은 변경되기 쉽습니다. – migsvult

+0

스캐너 나 카메라로 촬영 한 이미지가 아닌 컴퓨터에서 생성 된 이미지 인 것처럼 보입니다. (모든 라인이 완벽하게 수평/수직 인 방식으로 판단하면 모든 입력이 비슷할 것입니까? 그렇다면 분명히 작업이 쉬워집니다. –

답변

1

당신은 어떤 에서 OpenCV에게 답변을 받고있는 것으로 보이지 않는다, 그래서 나는 명령 줄에서 바로 터미널에서, ImageMagick이으로 시도했다. ImageMagick은 대부분의 Linux 배포판에 설치되며 무료로 macOS 및 Windows에서 사용할 수 있습니다. 이 기법은 OpenCV에 쉽게 적용 할 수 있으므로 효과가있는 경우이 기술을 이식 할 수 있습니다.

내 첫 번째 단계는 노이즈를 없애기 위해 5x5 박스 필터와 임계 값을 80 %로 설정 한 다음 반전시키는 것입니다 (아마도 형태학을 사용하려고 계획했기 때문에 가능했지만 결국 그렇지 않았습니다).

convert news.jpg -depth 16 -statistic mean 5x5 -threshold 80% -negate z.png 

enter image description here

나는 다음 을 통해을 "구성 요소 분석을 연결"것을 실행하고 (2000 픽셀에서) 너무 작은 면적을 가진 모든 모양을 삭제 :

convert news.jpg -depth 16 -statistic mean 5x5 -threshold 80% -negate \ 
    -define connected-components:verbose=true       \ 
    -define connected-components:area-threshold=2000     \ 
    -connected-components 4 -auto-level output.png 

출력

Objects (id: bounding-box centroid area mean-color): 
    110: 1254x723+59+174 686.3,536.0 901824 srgb(0,0,0) 
    2328: 935x723+59+910 526.0,1271.0 676005 srgb(0,0,0) 
    0: 1370x1692+0+0 685.2,712.7 399651 srgb(0,0,0) 
    2329: 303x722+1007+911 1158.0,1271.5 218766 srgb(0,0,0) 
    25: 1262x40+54+121 685.2,140.5 49820 srgb(255,255,255) 
    109: 1265x735+54+168 708.3,535.0 20601 srgb(255,255,255) 
    1: 1274x64+48+48 675.9,54.5 16825 srgb(255,255,255) 
    2326: 945x733+54+905 526.0,1271.0 16660 srgb(255,255,255) 
    2327: 312x732+1003+906 1169.9,1271.5 9606 srgb(255,255,255) <--- THIS ONE 
    421: 403x15+328+342 528.6,350.1 4816 srgb(255,255,255) 
    7: 141x23+614+74 685.5,85.2 2831 srgb(255,255,255) 

필드는 첫 번째 줄에 레이블이 지정되어 있지만 흥미로운 요소는 두 번째 (블록 형상) 및 네 번째 필드 (블롭 영역)입니다. 보시다시피 11 개의 줄이있어서 이미지에 11 개의 얼룩이 있습니다. 두 번째 필드 인 AxB+C+DA 픽셀의 너비가 B 픽셀이고 이미지의 왼쪽 가장자리에서 왼쪽 위 모서리가 C 픽셀이고 맨 위에서 아래쪽 이미지가 D 인 픽셀을 의미합니다.

convert news.jpg -fill "rgba(255,0,0,0.5)" -draw "rectangle 1003,906 1315,1638" oneArticle.png 

enter image description here

는 새 속으로 그 기사를 자르려면 : 2327: 312x732+1003+906를 시작하고 하나 그 이상 사각형을 그립니다 내가 화살표로 표시 한 하나의

살펴 보자, 이미지 :

convert news.jpg -crop 312x732+1003+906 article.jpg 

enter image description here

우리가 다른 모든 상자에 그리면

, 우리가 얻을 :

enter image description here

+0

좋은 직장. OpenCV에서는 계층 구조에 따라 등고선을 찾아 작은 얼룩을 제거 할 수 있습니다. 비슷한 결과를 얻을 것입니다 .. –

관련 문제