n x m x 3
행렬 (각 색상 채널에 대해 하나의 레이어)에 직사각형을 그리는 기능이 drawRect
입니다.이미지 행렬에 직사각형을 그리는 효율 R
은 2 개 개의 주요 파라미터 취 c(xleft, xright, ytop, ybottom)
PARAMS 사각형 및 가정에으로서의 기능이 작동 화상 매트릭스 im
drawRect <- function(rect, im, color=2){
int = 255
im[rect[3]:rect[4],rect[1],color] = int
im[rect[3]:rect[4],rect[2],color] = int
im[rect[3],rect[1]:rect[2],color] = int
im[rect[4],rect[1]:rect[2],color] = int
return(im)
}
한다. 그러나, 나는 3400 x 5200 x 3
이미지에 ~ 2000 개의 직사각형을 그리려하고 있는데, 이것은 매우 느리게됩니다. 내 이미지가를 사용하여 읽기이 속도를하는 방법에 어떤 아이디어
#xleft xright ytop ybottom
313 413 143 243
413 513 143 243
513 613 143 243
613 713 143 243
713 813 143 243
811 911 143 243
...
...
참고 :
내가 좋아하는 뭔가를 보이는 사각형 매개 변수의2000 x 4
행렬이 readJPEG
은 jpeg
패키지의 기능이며 writeJPEG
기능을 사용하여 파일에 기록됩니다.
편집 : 사각형 PARAMS의 행렬에 전달하고 함수의 여러 호출을 피하기 위해 적용 기능을 사용하여 시도,하지만 여전히 상당한 개선했습니다.
drawRect2 <- function(rects, im, color=2, int = 255){
x=apply(rects, 1, function(rect){
im[rect[3]:rect[4],rect[1],color] = int
im[rect[3]:rect[4],rect[2],color] = int
im[rect[3],rect[1]:rect[2],color] = int
im[rect[4],rect[1]:rect[2],color] = int
})
return(im)
}
그럼 내가 훨씬 적용하지만 didnt 한 도움에 포장 시도 ... 정말 함수에 많이하지를 프로그래머. 필기 부분은 저에게 관심사가 아닙니다. 그것은 꽤 빨리 씁니다. – by0
함수가 매우 느린 이유는 배열을 수정하려면 함수 내에서 복사해야하기 때문입니다. 그래서 당신이 그 함수를 호출 할 때마다, R은 아마 적어도 전체 배열의 복사본 하나를 생성하고있을 것입니다. – joran
함수에 대한 다중 호출을 피하기 위해 적용 함수에서이를 래핑하려고했습니다. 여전히 중요한 개선점은 (편집 참조) – by0