我有一个函数drawRect
可以在矩阵上绘制一个矩形n x m x 3
(每个颜色通道一层)。
它接受两个主要参数:矩形参数c(xleft, xright, ytop, ybottom)
和图像矩阵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 个矩形,这就是它变得非常缓慢的地方。
我有一个2000 x 4
矩形参数矩阵,看起来像:
#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
...
关于如何加快速度的任何想法?...
请注意,我的图像是使用包的功能读取的,并使用该readJPEG
功能jpeg
写入文件writeJPEG
。
编辑:我尝试传入矩形参数矩阵并使用应用函数来避免多次调用该函数,但仍然没有显着改进。
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)
}