데이콘 분석을 하고 있는 도중에 R로 분석하시는 분을 만났다. 그분과 내 분석 방식에서 청경채의 잎의 무게를 추정하는 알고리즘을 다르게 정의하고 있었다. 나는 HSV를 통하여 생상과 명도를 통해 자료를 추출하는 방식을 활용하였다. HSV는 색상, 채도, 명도를 통해 자료를 표현한다. 색상은 아래와 같이 정의된다.

청경채 이미지
R에서 image를 가져오고 array로 바꾸기 편리한 패키지들은 생각보다 적었는데 그중에서 imager 패키지를 활용하였다. 아래는 청경채 이미지를 불러오고 해상도를 1/4로 줄이는 코드이다.
library(imager)
img=load.image('CASE02_11.png')
img=imager::resize(img,820,616)

이미지 특정 범위 추출하기
기존 python의 opencv 패키지에서는 HSV의 범위가 180, 255, 255로 정의되어 있다.
library(imager)
img_extract=function(rgb_img,lower=c(0,0,0),upper=c(180,255,255)){
#opencv hsv range(180,255,255) -> imager hsv range(360,1,1)
lower=c(lower[1]*2,lower[2]/255,lower[3]/255)
upper=c(upper[1]*2,upper[2]/255,upper[3]/255)
hsv=imager::RGBtoHSV(rgb_img)
img_nrow=nrow(hsv)
img_ncol=ncol(hsv)
img_idxs=list()
for(i in 1:3){
#lower보다 작거나 upper보다 크면 삭제
hsv[array(lower[i]>hsv[,,1,i]|hsv[,,1,i]>=upper[i],
c(img_nrow,img_ncol,1,1))]=0
}
return(HSVtoRGB(hsv))
}
plot(img_extract(img,lower=c(25,0,0),upper=c(90,255,120)))
plot(img_extract(img,lower=c(10,0,0),upper=c(30,255,255)))
plot(img)


참고
RGB, HSV, YUV 색공간 이야기
The magick package: Advanced Image-Processing in R
imager: an R package for image processing
