drawRect
マトリックス上に長方形を描画する関数がありますn x m x 3
(カラーチャネルごとに1つのレイヤー)。
長方形パラメータc(xleft, xright, ytop, ybottom)
と画像行列の2つの主要なパラメータを取ります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)
}
関数は想定どおりに機能します。ただし、画像に最大2000個の長方形を描画しようとしてい3400 x 5200 x 3
ますが、これが非常に遅くなります。
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
編集:長方形パラメーターのマトリックスを渡し、apply関数を使用して関数の複数の呼び出しを回避しようとしましたが、それでも大きな改善はありません。
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)
}