Skip to content

sortinghyeok/Image_Processing_For_Vision_Inspection

Repository files navigation

영상처리 Algorithm 직접 구현을 이용한 비전 알고리즘 개발 (C#, EmguCV, Windows Forms...)

  • 본 Readme에 사용된 이미지는 pixabay 등에서 구한 free image입니다.
  • 본 프로젝트 수행 중 실제로 사용한 이미지는 반도체 Circuit 및 Particle 등의 bmp 파일이었음을 밝힙니다.
  • 모든 영상처리 솔루션은 영상처리 및 컴퓨터비전 라이브러리가 일체 사용되지 않았으며, 픽셀에 대해 메모리에 직접 접근하여 알고리즘을 구현하였습니다.
  • 픽셀에 대한 메모리 접근은 unsafe 구문 내의 포인터를 이용하였으며, C++ 기반의 영상처리 서적을 참고했습니다.

대용량 bmp 파일에 대한 로딩 로직 구현, 전체 이미지 세이브 로직 구현 완료 / 2022.08.23

완료

  • 파일을 바이트 Stream으로 변경하고, 해당 Stream을 메모리 직접 접근을 통한 로우 레벨 수준의 분할 Reading하여 메모리가 처리 가능한 수준으로 바꾸어 로딩 성공

image

Morphology Dilation 연산 적용 완료, 확대, 축소 기능 적용 개발 완료 / 2022.08.24

완료

  • 픽셀 패딩 밀리는 현상 수정 완료
  • 모폴로지 연산 중 팽창 구현 완료

image

이슈

  • 확대, 축소 시 저장 기능에 문제 있음
  • 모폴로지 침식 연산 구현 요망

Morphology Erosion 연산 적용 완료 / 2022.08.25

완료

  • 모폴로지 연산 중 침식(축소) 구현 완료

image

이슈

  • 오리지널 비트맵의 저장시 저장 안되는 이슈 발견

Histogram Equalization, Otsu Binarization 연산 적용 완료 / 2022.08.26

완료

  • 히스토그램 평활화와 오츠 이진화 기능 구현 완료

image

image

이슈

  • Gaussian Filter 기능 로직 완료했으나 Blur가 적용되지 않고 단순히 색채가 어두워지기만 하여 로직의 문제가 있음
  • 연산 미처리한 원데이터 저장 불가 이슈 잔존, 연산 추가 개발 후 추후 수정하도록 함

Morphology Erosion, Parallel Processing 중 이슈 발견 / 2022.08.29

이슈

  • 모폴로지 침식 중 픽셀의 우측만이 수그러드는 현상 발견, 코드 구현 중 커널의 중심이 정가운데가 아닌 좌측에 있는 것을 확인하고 이에 대한 수정 요망
  • 병렬 처리 시도 시 CPU 점유율이 98퍼센트까지 올라가고 프로그램은 응답이 없는 현상이 계속

Morphology Erosion, Dilation, Gaussian Filter 로직 병렬화 적용 성공 / 2022.08.29

완료

  • 모폴로지 침식, 팽창, 가우시안 필터 연산에 병렬화를 적용하여 7~10배 정도의 연산 속도 향상 확인

병렬 프로세싱 전

image

image

병렬 프로세싱 후

image

image

image

이슈

  • 픽셀의 우측이 수그러드는 현상에 대하여 커널 로직 상 문제 없음 확인. 이미지 패딩에 의한 것일 확률이 있어 이에 대한 이슈 발생

Gaussian Filter 기능(Blur) 수정 및 구현 완료 / 2022.08.29

완료

  • 가우시안 필터에 대한 로직 수정 완료

image

이슈

  • 히스토그램 평활화에 병렬화 로직 추가 필요
  • 라플라스 필터 추가 구현 예정

Laplace Filter 기능(Edge Detection) 구현 완료 / 2022.08.30

완료

  • 라플라스 필터에 대한 구현 완료

image

이슈

  • 라플라스 필터에 병렬화 적용 예정
  • 해당 라플라스 필터 로직은 이미지의 경계 검출은 가능하나, bitmap 화소에 255 혹은 0의 값을 대입하므로 픽셀 간 상대적 차이를 반영하지 못함

모폴로지 침식 중 픽셀의 우측만이 수그러드는 현상 수정 완료 / 2022.08.30

완료

  • Morphology Pointer를 반복문 당 1씩 늘어나게 하여 픽셀 별로 모두 적용되는 것을 유도했으나, padding 1~3bytes에 대하여도 이것이 적용되어 우측 여유 공간의 수축이 일어났던 것으로 확인
  • Pixel에 대한 접근시 해당 Row의 Stride를 갱신하는 것으로 정확한 line의 매핑이 가능해져, 해당 이슈에 대한 수정이 완료됨

image

image

Laplace Filter 병렬화 구현 완료 / 2022.08.30

완료

  • 라플라스 필터에 대한 병렬화 적용 완료

이슈

  • 병렬화 적용으로 성능이 개선되었으나, 여전히 약 30초 정도의 시간 소요 중임. 프로세스와 비례하여 속도가 빨라지지 않는 원인 파악 필요 --> 픽셀에 대한 여러가지 연산이 중첩된 후에 적용시에는 느려지는 것이 맞음. 오리지널 데이터에 적용시 약 10~12배 성능 개선되었으므로 CPU 갯수와 비례하여 개선 완료

Histogram Equalization 일부 코드에 대한 병렬화 적용, 코드 가시성 개선 및 Refactoring / 2022.09.01

완료

  • 히스토그램 누계 버퍼에 대한 병렬화 구현
  • Vision Algorithm 하이어라키 개선
  • Dummy Code 제거 등

이슈

  • 히스토그램 병렬화 메인 코드에 대한 병렬화 적용이 되지 않아 버퍼에 대한 병렬화를 진행했음에도 타 알고리즘의 개선된 정도와는 현저하게 낮은 정도로 개선됨

비 이진화 Laplace Filter 추가 / 2022.09.02

완료

  • 0-255로 구분하는 자체 구현한 라플라스 필터는 오츠 이진화를 선행해주어야 하는 제약조건이 있어, 웹 상에서 가져온 코드를 적용하여 아래와 같은 범용 라플라스 필터 기능을 추가함 (따라서 해당 코드는 스스로 구현한 것이 아니며, 본 프로젝트의 목적 중 하나였던 대용량 이미지에 대한 처리는 하지 못함)

image

About

영상에 대한 low level 접근을 통한 비전 알고리즘 개발

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages