Skip to content

2022 2nd semester [Computer Vision application](pf. 이승호) project

Notifications You must be signed in to change notification settings

PyoSH/crayonMisassemblyDetector

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Crayon assembly Detector

이 프로그램은 2022년 2학기 [Computer Vision Appliance(professor. 이승호)] course의 결과물입니다.
수업의 과제인 "크레용판 생산과정에서 잘못 조립된 크레용을 검출 하고 시각화 하는 것"이 목표이고, 기계학습 방법을 제외한 OpenCV를 사용했습니다.
효율적인 프로그램을 작성할 수 있도록 나중에 취미삼아 바꿀 생각이 있지만, 강의의 목적에 따라 컴퓨터 비전 접근법으로 문제를 해결하는 것이 주된 프로그램입니다.

[입력 예시] [시각화 예시]

0. Dev Environment

  • Python 3.7
  • Used library : Numpy, OpenCV, Matplotlib

1. 상/하 뒤집어진 크레용 검출하기

입력 사진마다 크레용 판과의 거리와 각도가 다르기에 전처리로 크레용 판만 담아냈습니다.

  1. 이진화, bitwise_or. 를 사용해 크레용들을 묶은 후 Contour&warp perspective 기능을 사용해 크레용 판만 있는 이미지를 만들었습니다.
    (네 모서리를 구별하는 방법을 간단하게 구현했는데, 이 방법은 뒤에도 자주 사용됩니다)
  2. 각 크레용마다 네 모서리를 구하고, 사람 기준 왼쪽 상단 모서리의 위치에 따라 뒤집어짐을 구분합니다.

2. 각도가 틀어진 크레용 검출하기

이 문제는 두 가지 해결법을 만들었습니다. 영상적분 , 히스토그램 투영 입니다. (더 쿨한 방법은 후자라고 생각합니다)
앞선 1번 문제 해결 과정에서 크레용판만 만들어진 영상의 모든 크레용의 모서리들을 구했습니다. 이를 통해 각 크레용들을 동일한 크기의 이미지로 만들어 특정 영역에 대해 분석할 수 있습니다. 만약 크레용이 잘 정렬되어 조립됐다면 특정 영역에서 손잡이를 제외한 색상이 가장 많이 검출될 것입니다. 여기에서 방법이 나뉩니다.

영상적분

특정 영역에서 손잡이를 제외한 색상을 전부 합했을 때 임계값을 넘는지 넘지 않는지의 간단한 방법입니다. 개념은 간단하지만 전처리 품질에 영향을 많이 받아 예외를 고려하고 임계값을 조정해야 합니다. 또한, 틀어졌다/아니다만 확인가능합니다.

  • integral_test.py와 final_int.py에서 예시 프로그램과 응용버전을 확인할 수 있습니다.

히스토그램 투영

특정 영역에서 손잡이를 제외한 색상을 이진화합니다. 이미지 기준 y축 방향으로 누적해 히스토그램을 만들면 분포에 따라 좌로, 혹은 우로 각도가 틀어졌는지 구분할 수 있습니다. 다양한 크레용의 사례에 따라 히스토그램이 다양하게 나오기 때문에 누적이 특정 값 이상으로 된 대상들에 대해 최빈값을 구하고, 이 최빈값의 x픽셀 위치가 어디에 있는가를 다른 조건들과 함께 판단해 어느 방향으로 각도가 틀어졌는지 구분하도록 했습니다.
[정상, 오른쪽, 왼쪽, 뒤집어짐에 대한 히스토그램 예시]

  • hist_projection.py와 finalPBL.py에서 예시 프로그램과 응용 버전을 확인할 수 있습니다.

3. 꽂힌 순서가 잘못된 크레용 검출하기

순서가 잘못되었는지를 확인하려면 대상의 색상을 알 수 있어야 합니다.
색상 그 자체와 밝기를 고려해야 하기에 BGR, HLS 색공간에서 색을 분류할 수 있도록 했습니다.

  1. 뒤집혔는지의 여부에 따라 크레용의 관심영역을 설정합니다.
  2. 관심영역의 밝기(HLS 중 L)를 평활화하고 관심영역의 최빈값을 B,G,R,H,S에 대해 각기 구합니다.
  3. 5개의 요소를 가진 최빈값 스칼라와 기준 색상 스칼라들에 대해 유클리드 거리를 구합니다.가장 최단거리인 기준 색상이 해당 색상입니다.

$$ distance = \sqrt{(r1-r2)^2 + (g1-g2)^2 + (b1-b2)^2 + (h1-h2)^2 + (s1-s2)^2} $$

  • 흰색과 살구색의 유사 색상에 대해서는 BGR 총 합이 가장 높은 것이 흰색이므로 모든 크레용에 대해 색을 추정한 후 스칼라들을 비교해 구별하도록 했습니다.

Releases

No releases published

Packages

No packages published

Languages