OpenCL을 사용하여 이미지 히스토그램 계산하기
이미지 히스토그램
이미지 히스토그램(Image histogram)은 밝기와 RGB 회색조 값의 발생 빈도를 나타내는 통계 데이터다.
막대그래프로 가시화하는 경우가 많다.
많은 이미지 편집 소프트웨어를 통해 이미지의 특징을 표시할 수 있다.
다음 그림은 GIMP의 예입니다.
!
wikipedia: Image histogram
위키백과: 직사각형
직사각형을 계산하는 샘플 코드
github가 공개한 것을 테스트하다.
https://github.com/bgaster/opencl-book-samples/tree/master/src/Chapter_14/histogram
이 견본은 두 단계로 나누어 계산한다.
(1) 이미지를 슬라이스로 분할하여 각 슬라이스의 부분 값을 병렬 계산합니다.
(2) 부분 값 합계.
일부 값은 호스트 측에서 액세스하지 않습니다.
대상에서 액세스하는 읽기 및 쓰기 가능 스토리지 영역에 저장됩니다.
모드는 다음 그림과 같습니다.
호스트 측
histogram.cpp
partial_histogram_buffer = clCreateBuffer(context, CL_MEM_READ_WRITE, num_groups*257*3*sizeof(unsigned int), NULL, &err);
clSetKernelArg(histogram_rgba_unorm8, 0, sizeof(cl_mem), &input_image_unorm8);
clSetKernelArg(histogram_rgba_unorm8, 1, sizeof(int), &NUM_PIXELS_PER_WORK_ITEM);
clSetKernelArg(histogram_rgba_unorm8, 2, sizeof(cl_mem), &partial_histogram_buffer);
clSetKernelArg(histogram_sum_partial_results_unorm8, 0, sizeof(cl_mem), &partial_histogram_buffer);
clSetKernelArg(histogram_sum_partial_results_unorm8, 1, sizeof(int), &num_groups);
clSetKernelArg(histogram_sum_partial_results_unorm8, 2, sizeof(cl_mem), &histogram_buffer);
목표 측image_histogram.c
kernel
void histogram_image_rgba_unorm8(image2d_t img, int num_pixels_per_workitem, global uint *histogram)
kernel
void histogram_sum_partial_results_unorm8(global uint *partial_histogram, int num_groups, global uint *histogram)
수정된 입력 이미지를 이미지 파일에서 Giithub로 읽습니다.https://github.com/ohwada/MAC_cpp_Samples/tree/master/OpenCL-Histogram
직사각형을 도표화하다
OpenCL 프로그램은 직사각형 값만 계산합니다.
python matplotlib 을 사용하여 스트라이프에 표시합니다.
예제가 실행되었습니다.
결과의 타당성
상술한 그림의 타당성을 다른 방법과 계산하여 그림을 만들어 비교하고 검증한다.
수단1:GIMP
이미지 편집 소프트웨어GIMP에 직사각형을 표시합니다.
비교해 보니 비슷한지 안 비슷한지 판단할 수 없다.
수단2:matplotlib
matplotlib의 hist API 계산을 통해 그림을 만든다.
hist API는 히스토그램의 계산과 드로잉을 함께 정리합니다.
비교되는 부분이 비슷하네요.
수단2:matplotlib
matplotlib의 hist API 계산을 통해 그림을 만든다.
hist API는 히스토그램의 계산과 드로잉을 함께 정리합니다.
비교되는 부분이 비슷하다.
사용하는python 코드가 여기 있습니다.
https://github.com/ohwada/MAC_cpp_Samples/tree/master/OpenCL-Histogram/tools
수단3: OpenCV
OpenCVcalcHist API로 계산했습니다.
API로 그린 그림을 OpenCV로 그립니다.
비교되는 부분이 비슷하다.
사용된 OpenCV의 인코딩은 여기에 있습니다.
https://github.com/ohwada/MAC_cpp_Samples/tree/master/OpenCV-Histogram
Reference
이 문제에 관하여(OpenCL을 사용하여 이미지 히스토그램 계산하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ohwada/items/6435fdd34b1d8a52f6f8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)