У меня есть большая коллекция файлов изображений для книги, и издателю нужен список, в котором файлы классифицируются по «типу» (график в оттенках серого, ч / б полутоновое изображение, цветное изображение, рисование линий и т. Д.).В общем, это сложная проблема, но, возможно, я смогу сделать это автоматически, используя инструменты обработки изображений, например ImageMagick с пакетом magick R.
Я думаю, ImageMagick - правильный инструмент, но я недействительно знаю, как использовать его для этой цели.
То, что у меня есть, это просто список цифр и имен файлов фига:
1.1 ch01-intro/fig/alcohol-risk.jpg
1.2 ch01-intro/fig/measels.png
1.3 ch01-intro/fig/numbers.png
1.4 ch01-intro/fig/Lascaux-bull-chamber.jpg
...
Может ли кто-нибудь помочь мне начать?
Редактировать :Вероятно, это был плохо сформулированный или чрезмерно изогнутый вопрос, как было заявлено изначально.Я подумал, что ImageMagick identify
или функция R magick::image_info()
могут помочь, поэтому, возможно, первоначальный вопрос должен был звучать так: «Как извлечь информацию об изображении из списка файлов [в R]».Я могу изложить это отдельно, если еще не спросил.
Первоначальная попытка этого дала мне следующее для моих первых изображений:
library(magick)
# initialize an empty array to hold the results of `image_info`
figinfo <- data.frame(
format=character(),
width=numeric(),
height=numeric(),
colorspace=character(),
matte=logical(),
filesize=numeric(),
density=character(), stringsAsFactors = FALSE
)
for (i in seq_along(files)) {
img <- image_read(files[i])
info <- image_info(img)
figinfo[i,] <- info
}
Я получаю:
> figinfo
format width height colorspace matte filesize density
1 JPEG 661 733 sRGB FALSE 41884 72x72
2 PNG 838 591 sRGB TRUE 98276 38x38
3 PNG 990 721 sRGB TRUE 427253 38x38
4 JPEG 798 219 sRGB FALSE 99845 300x300
Я пришел к выводу, что это не очень помогаетв ответе на вопрос, который я поставил, о том, как классифицировать эти изображения.
Edit2 Прежде чем закрыть этот вопрос, был полезен совет по прямому использованию ImageMagick identify
.https://imagemagick.org/script/escape.php В частности, %[type]
ближе к тому, что мне нужно.Это не раскрывается в magick::image_info()
, поэтому мне, возможно, придется написать скрипт оболочки или вызвать system()
в цикле.
Для справки, вот как я могу извлечь соответствующие атрибуты этих файлов изображений, используя identify
.
# Get image characteristics via ImageMagick identify
# from: https://imagemagick.org/script/escape.php
#
# -format elements:
# %m image file format
# %f filename
# %[type] image type
# %k number of unique colors
# %h image height in pixels
# %r image class and colorspace
identify -format "%m,%f,%[type],%r,%k,%hx%w" imagefile
>identify -format "%m,%f,%[type],%r,%k,%hx%w" Quipu.png
PNG,Quipu.png,GrayscaleAlpha,DirectClass Gray Matte,16,449x299
Атрибут %[type]
ведет меня к тому, что я хочу.