Я хотел бы создать ограничивающий прямоугольник в формате * txt в R для будущего обучения YOLO. Я хотел бы использовать изображение jpg с одним подарком эллипса, который был создан в пакете ggplot2
. В моем примере:
#Packages
library(ggplot2)
library(ggforce)
library(raster)
#Create a ellipse using ggplot2
ell.sim<-ggplot() +
geom_ellipse(aes(x0 = 200, y0 = 200, a = 150, b = 50, angle = 0), fill="black") +
coord_fixed(xlim=c(0,1000),ylim=c(0,1000)) +
scale_y_continuous(expand = c(0, 0)) +scale_x_continuous(expand = c(0, 0))
ell.sim2 <- ell.sim + theme_void()
plot(ell.sim2)
#Save in JPG format with 100 DPI
ggsave(
filename="ellipse_test.jpg",
plot = ell.sim2,
width = 10,
height = 10,
dpi = 100)
#Extract the ellipse limits for the bounding boxes creation
ell.sim.coords <- ggplot_build(ell.sim2)
Создать YOLO * текстовый файл с ограничивающими прямоугольниками
<object-class> <x> <y> <width> <height>
<class_number> (<absolute_x> / <image_width>) (<absolute_y> / <image_height>) (<absolute_width> / <image_width>) (<absolute_height> / <image_height>)
#absolute_x
img <- stack(paste0("ellipse_test.jpg"))
x = (max(ell.sim.coords$data[[1]]$x)-min(ell.sim.coords$data[[1]]$x))/2
#absolute_y
y = (max(ell.sim.coords$data[[1]]$y)-min(ell.sim.coords$data[[1]]$y))/2
#absolute_height
nrow(img)
#absolute_width
ncol(img)
Creeate YOLO * txt
class_number<-0
absolute_x_image_width<-x/ncol(img)
absolute_y_image_width<-y/nrow(img)
absolute_width_image_width<-(max(ell.sim.coords$data[[1]]$x)-min(ell.sim.coords$data[[1]]$x))/ncol(img)
absolute_height_image_height<-(max(ell.sim.coords$data[[1]]$y)-min(ell.sim.coords$data[[1]]$y))/nrow(img)
bb<-data.frame(class_number,absolute_x_image_width,absolute_y_image_width,absolute_width_image_width,absolute_height_image_height)
write.table(bb, file = paste0("ellipse_test.txt"), row.names = FALSE, col.names = FALSE)
#
#Open *txt file for look <class_number> (<absolute_x> / <image_width>) (<absolute_y> / <image_height>) (<absolute_width> / <image_width>) (<absolute_height> / <image_height>)
В 10 * 10 pi c есть объект [x, y, w, h] = [200 200 150 150] 0
read.table("ellipse_test.txt",h=F)
0 0.15625 0.05208333 0.3125 0.1041667
Follow yolo, нормализованное расположение к [0.15625, 0.05208333, 0.3125, 0.3125]
Для тестирования созданного файла * txt и созданного jpg я использую программное обеспечение labelImg
, а эллипс и ограничивающий прямоугольник не совпадают в image:
И labelImg дает мне правильные ограничивающие рамки, что-то вроде:
0 0.200000 0.800000 0.300000 0.100000
Пожалуйста, какие-либо типы для выполнения этой операции в R?