Grabcut 알고리즘에서 원하지 않는 공백을 제거하는 방법은 무엇입니까?

투 비전 2

Grabcut 알고리즘을 사용하여 배경 빼기를 구현했습니다. 하지만 소스 이미지에서 자른 이미지에 원치 않는 공백이있었습니다. 잘린 이미지의 공백을 제거하는 방법.?

단계 :

  1. 카메라에서 비디오를 읽고 이미지를 읽습니다. 내 입력 이미지 :여기에 이미지 설명 입력

  2. Grabcut 알고리즘 적용.

    cv :: grabCut (이미지,
    결과,
    rectangle1, bgModel, fgModel, 1, cv :: GC_INIT_WITH_RECT); cv :: compare (result, cv :: GC_PR_FGD, result, cv :: CMP_EQ);

  3. 소스에서 전경 이미지를 자릅니다.

    cv :: 매트 전경 (image.size (), CV_8UC3, cv :: Scalar (255,255,255)); image.copyTo (전경, 결과);

  4. 내 출력 이미지 :

여기에 이미지 설명 입력

이미지에서 얼굴 영역의 공백을 제거하는 방법은 무엇입니까?

KjMag

세 가지 해결책을 생각할 수 있습니다. 이들 각각은 결과 추출 영역 (즉, Grabcut 알고리즘을 사용한 후 파생 된 영역)에 적용되어야합니다.

해결책 1

추출 된 영역의 경계에있는 각 픽셀에 대해 :

  1. 추출 된 개체의 경계에도 속하는이 픽셀의 가까운 이웃을 가져옵니다.

  2. 이 이웃에 속하는 픽셀에 직선 A맞추십시오 (openCV에는이를 수행하는 함수가 있습니다 : fitline () )

  3. 적합 선에 수직 인 선 B계산합니다 .

  4. 라인 B에 있고 Grabcut 알고리즘으로 추출한 영역에 속하는 픽셀을 제거 / 색칠합니다.

애플리케이션에서 사용자가 이미지를 클릭하고 일부 옵션을 선택하여 수동으로이 작업을 적용 할 수있는 경우 위에 제공된 알고리즘이이 단계에서 문제를 해결합니다. 사용자는 필요한만큼이 작업을 수행하고 고정 된 하드 코딩 된 일부를 제거 할 수 있습니다. 작업이 수행 될 때마다 B 라인을 따라있는 픽셀 수 또는 작업이 호출 될 때마다 제거되어야하는 픽셀 수를 제공합니다.

사용자 상호 작용없이 수행 해야하는 경우 또 다른 문제는 라인 B 를 따라 제거해야하는 픽셀 수를 결정하는 것입니다. 이 문제에 대한 해결책은 처리 할 이미지가 얼마나 유사한 지, 배경이 균일한지 또는 색상 그라데이션이 크게 다를 수 있는지에 따라 다릅니다. 예를 들어 테두리에있는 픽셀의 값을 배경의 평균 픽셀 값 (또는 배경이 균일 한 색상이 아닌 경우 배경의 일부)과 비교할 수 있습니다.- 충분히 유사한 경우 (그리고 알아 내야합니다. , 특정 애플리케이션에 대해 충분히 유사 함 ) 픽셀이 제거됩니다.

해결 방법 2

경계 픽셀을 반복하고 해당 값을 배경 픽셀 값과 비교합니다 (세부 사항은 솔루션 1 참조 ). 픽셀 값이 배경 값 과 충분히 유사 하면 ( 솔루션 1 참조 ) 픽셀을 제거합니다.

해결책 3

사용자가이 작업을 적용 할 때마다 테두리 픽셀은 값을 확인하지 않고 제거됩니다. 이 작업의 깊이 (즉, 제거되는 가장자리에 가까운 픽셀 수)는 하드 코딩되거나 사용자가 지정할 수 있습니다. 일종의 이미지 침식 이라고 생각할 수 있습니다 .


솔루션 1 은 특히 ​​사용자가이 작업을 수동으로 수행해야하는 경우 더 정확한 결과를 산출 할 수 있지만 솔루션 2 는 구현하기가 훨씬 쉽고 계산 복잡성이 적습니다.

솔루션 3 은 가장 간단하지만 작업이 수행 될 때마다 전체 사진이 잘리고 실제로 자르기가 필요한 부분 만 잘 리기 때문에 가장 정확하지 않습니다. 많은 경우에 이것은 거의 보이지 않을 수 있으므로 시도해 볼 가치가 있습니다. 또한이 솔루션은 사용자가이 작업을 수동으로 수행해야하는 경우에만 적합합니다 (알고리즘이 제거해야하는 픽셀 수를 결정할 수 없기 때문에).

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

OpenCV를 사용하여 Grabcut 알고리즘의 정확도를 높이는 방법은 무엇입니까?

분류에서Dev

알고리즘에서 지원되지 않는 로케일을 감지하고 처리하는 방법은 무엇입니까?

분류에서Dev

img를 감싸는 div에서 원하지 않는 공간을 제거하는 방법은 무엇입니까?

분류에서Dev

C에서 공백 줄을 제거하는 방법은 무엇입니까?

분류에서Dev

요소에서 공백을 제거하는 방법은 무엇입니까?

분류에서Dev

특정 줄에서 공백을 제거하는 방법은 무엇입니까?

분류에서Dev

문자열 뒤에 공백을 추가하고 공백을 제거하는 방법은 무엇입니까?

분류에서Dev

다른 높이 div에서 공백을 제거하고 서로 "흡입"하는 방법은 무엇입니까?

분류에서Dev

배열 된 입력에서 원하지 않는 값을 제거하는 방법은 무엇입니까?

분류에서Dev

페이지 하단에서 공백을 제거하는 방법은 무엇입니까?

분류에서Dev

R의 Excel 파일에서 원하지 않는 열을 제거하는 방법은 무엇입니까?

분류에서Dev

서버에서 x 분마다 알고리즘을 실행하는 방법은 무엇입니까?

분류에서Dev

strip () 함수를 사용하지 않고 공백을 제거하거나 제거하는 방법은 무엇입니까?

분류에서Dev

Swift 문자열 내부에서 "비 분리 공백"을 제거하는 방법은 무엇입니까?

분류에서Dev

공백을 제외하지 않고 값을 제외하는 방법은 무엇입니까?

분류에서Dev

이 컨텍스트에서 C ++ 표준 알고리즘을 적용하는 방법은 무엇입니까?

분류에서Dev

Google Dataproc 클러스터에서 Java 병렬 알고리즘을 실행하는 방법은 무엇입니까?

분류에서Dev

WEKA에서 여러 알고리즘을 병합하는 방법은 무엇입니까?

분류에서Dev

자바 스크립트에서 TileWindows 알고리즘을 구현하는 방법은 무엇입니까?

분류에서Dev

elki-tutorial-0.7.0.jar 내에서 알고리즘을 실행하는 방법은 무엇입니까?

분류에서Dev

Android의 OpenCV에서 알고리즘을 최적화하는 방법은 무엇입니까?

분류에서Dev

파이썬에서 FFT 알고리즘을 구현하는 방법은 무엇입니까?

분류에서Dev

OpenSSL 소스 코드에서 특정 OpenSSL 암호화 알고리즘을 비활성화 / 제거하는 방법은 무엇입니까?

분류에서Dev

원형 배열을 사용하여 Javascript에서 공정성 알고리즘을 작성하는 방법은 무엇입니까?

분류에서Dev

문자 사이의 공백을 제거하고 한 줄에 인쇄하는 방법은 무엇입니까?

분류에서Dev

모든 것을 삭제하지 않고 데비안에서 원하지 않는 데스크탑 패키지를 제거하는 방법은 무엇입니까?

분류에서Dev

Seaborn의 clustermap에서 빈 컬러 바 / cbar에서 큰 공백을 제거하는 방법은 무엇입니까?

분류에서Dev

행렬에서 공백을 삭제하는 방법은 무엇입니까?

분류에서Dev

UITextfield에서 공백을 제한하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    OpenCV를 사용하여 Grabcut 알고리즘의 정확도를 높이는 방법은 무엇입니까?

  2. 2

    알고리즘에서 지원되지 않는 로케일을 감지하고 처리하는 방법은 무엇입니까?

  3. 3

    img를 감싸는 div에서 원하지 않는 공간을 제거하는 방법은 무엇입니까?

  4. 4

    C에서 공백 줄을 제거하는 방법은 무엇입니까?

  5. 5

    요소에서 공백을 제거하는 방법은 무엇입니까?

  6. 6

    특정 줄에서 공백을 제거하는 방법은 무엇입니까?

  7. 7

    문자열 뒤에 공백을 추가하고 공백을 제거하는 방법은 무엇입니까?

  8. 8

    다른 높이 div에서 공백을 제거하고 서로 "흡입"하는 방법은 무엇입니까?

  9. 9

    배열 된 입력에서 원하지 않는 값을 제거하는 방법은 무엇입니까?

  10. 10

    페이지 하단에서 공백을 제거하는 방법은 무엇입니까?

  11. 11

    R의 Excel 파일에서 원하지 않는 열을 제거하는 방법은 무엇입니까?

  12. 12

    서버에서 x 분마다 알고리즘을 실행하는 방법은 무엇입니까?

  13. 13

    strip () 함수를 사용하지 않고 공백을 제거하거나 제거하는 방법은 무엇입니까?

  14. 14

    Swift 문자열 내부에서 "비 분리 공백"을 제거하는 방법은 무엇입니까?

  15. 15

    공백을 제외하지 않고 값을 제외하는 방법은 무엇입니까?

  16. 16

    이 컨텍스트에서 C ++ 표준 알고리즘을 적용하는 방법은 무엇입니까?

  17. 17

    Google Dataproc 클러스터에서 Java 병렬 알고리즘을 실행하는 방법은 무엇입니까?

  18. 18

    WEKA에서 여러 알고리즘을 병합하는 방법은 무엇입니까?

  19. 19

    자바 스크립트에서 TileWindows 알고리즘을 구현하는 방법은 무엇입니까?

  20. 20

    elki-tutorial-0.7.0.jar 내에서 알고리즘을 실행하는 방법은 무엇입니까?

  21. 21

    Android의 OpenCV에서 알고리즘을 최적화하는 방법은 무엇입니까?

  22. 22

    파이썬에서 FFT 알고리즘을 구현하는 방법은 무엇입니까?

  23. 23

    OpenSSL 소스 코드에서 특정 OpenSSL 암호화 알고리즘을 비활성화 / 제거하는 방법은 무엇입니까?

  24. 24

    원형 배열을 사용하여 Javascript에서 공정성 알고리즘을 작성하는 방법은 무엇입니까?

  25. 25

    문자 사이의 공백을 제거하고 한 줄에 인쇄하는 방법은 무엇입니까?

  26. 26

    모든 것을 삭제하지 않고 데비안에서 원하지 않는 데스크탑 패키지를 제거하는 방법은 무엇입니까?

  27. 27

    Seaborn의 clustermap에서 빈 컬러 바 / cbar에서 큰 공백을 제거하는 방법은 무엇입니까?

  28. 28

    행렬에서 공백을 삭제하는 방법은 무엇입니까?

  29. 29

    UITextfield에서 공백을 제한하는 방법은 무엇입니까?

뜨겁다태그

보관