require(EBImage)
require(magick)
require(tidyverse)
require(ggthemes)
require(knitr)
require(kableExtra)
theme_set(theme_tufte(base_size = 16))
set.seed(3)
Allar myndirnar eru geymdar undir yfirmöppunni Myndir sem skiptist í undirmöppur:
nirscene1
places2
Þær möppurnar skiptast svo í urban / nature sem hafa hvor sína undirhópa:
urban: building, indoors, object, streetview
nature: field, forest, rock, water
files <- list()
for (db in list.files('Myndir')) {
for (type in list.files(paste('Myndir', db, sep = '/'))) {
for (subtype in list.files(paste('Myndir', db, type, sep = '/'))) {
files[[db]][[type]][[subtype]] <- data_frame(database = db,
type = type,
subtype = subtype,
slóð = list.files(paste('Myndir',
db,
type,
subtype,
sep = '/')) %>%
paste('Myndir', db, type, subtype, ., sep = '/'))
}
}
}
Þá er kominn listi af mörgum litlum gagnasöfnum. Næst sameina ég öll litlu gagnsöfnin í eitt stórt.
files_df <- files %>%
map(~ map(., ~reduce(., rbind))) %>%
map(~ reduce(., rbind)) %>%
reduce(rbind)
rm(files)
Það gæti verið að einhverjar möppurnar séu tóma þ.a. ég tek burt allar raðir í gagnarammanum hverrar slóð endar ekki á forminu .(einhverjirbókstafir).
files_df <- files_df %>%
filter(str_detect(slóð, '([a-zA-Z0-9]+\\.[a-zA-Z]+)'))
files_df %>%
sample_n(100) %>%
kable(format = 'html', caption = 'Gagnasafn (hægt að scrolla allt)') %>%
kable_styling(full_width = TRUE, bootstrap_options = c('striped', 'hover')) %>%
scroll_box(height = '400px')
| database | type | subtype | slóð |
|---|---|---|---|
| nirscene1 | nature | rock | Myndir/nirscene1/nature/rock/0016_rgb.tiff |
| places2 | urban | building | Myndir/places2/urban/building/Places365_val_00001321.jpg |
| nirscene1 | urban | indoor | Myndir/nirscene1/urban/indoor/0011_rgb.tiff |
| nirscene1 | urban | building | Myndir/nirscene1/urban/building/building0014_rgb.tiff |
| places2 | nature | field | Myndir/places2/nature/field/Places365_val_00000300.jpg |
| places2 | urban | streetview | Myndir/places2/urban/streetview/Places365_val_00001372.jpg |
| nirscene1 | nature | forest | Myndir/nirscene1/nature/forest/0056_rgb.tiff |
| nirscene1 | nature | water | Myndir/nirscene1/nature/water/0060_rgb.tiff |
| nirscene1 | urban | streetview | Myndir/nirscene1/urban/streetview/0079_rgb.tiff |
| places2 | nature | field | Myndir/places2/nature/field/Places365_val_00001027.jpg |
| nirscene1 | urban | indoor | Myndir/nirscene1/urban/indoor/0050_rgb.tiff |
| nirscene1 | urban | indoor | Myndir/nirscene1/urban/indoor/0048_rgb.tiff |
| nirscene1 | urban | streetview | Myndir/nirscene1/urban/streetview/0000_rgb.tiff |
| nirscene1 | urban | streetview | Myndir/nirscene1/urban/streetview/0049_rgb.tiff |
| places2 | urban | indoor | Myndir/places2/urban/indoor/Places365_val_00000753.jpg |
| places2 | urban | building | Myndir/places2/urban/building/Places365_val_00001077.jpg |
| nirscene1 | nature | forest | Myndir/nirscene1/nature/forest/0036_rgb.tiff |
| places2 | nature | forest | Myndir/places2/nature/forest/Places365_val_00001131.jpg |
| places2 | urban | indoor | Myndir/places2/urban/indoor/Places365_val_00001111.jpg |
| nirscene1 | nature | water | Myndir/nirscene1/nature/water/0036_rgb.tiff |
| nirscene1 | nature | rock | Myndir/nirscene1/nature/rock/0039_rgb.tiff |
| nirscene1 | nature | field | Myndir/nirscene1/nature/field/0010_rgb.tiff |
| places2 | urban | streetview | Myndir/places2/urban/streetview/Places365_val_00001336.jpg |
| nirscene1 | nature | forest | Myndir/nirscene1/nature/forest/0023_rgb.tiff |
| nirscene1 | nature | rock | Myndir/nirscene1/nature/rock/0043_rgb.tiff |
| places2 | nature | water | Myndir/places2/nature/water/Places365_val_00000510.jpg |
| nirscene1 | urban | streetview | Myndir/nirscene1/urban/streetview/0067_rgb.tiff |
| places2 | urban | indoor | Myndir/places2/urban/indoor/Places365_val_00000861.jpg |
| nirscene1 | urban | indoor | Myndir/nirscene1/urban/indoor/0056_rgb.tiff |
| places2 | nature | rock | Myndir/places2/nature/rock/Places365_val_00000124.jpg |
| nirscene1 | urban | building | Myndir/nirscene1/urban/building/building0027_rgb.tiff |
| nirscene1 | urban | building | Myndir/nirscene1/urban/building/building0022_rgb.tiff |
| nirscene1 | nature | rock | Myndir/nirscene1/nature/rock/0010_rgb.tiff |
| nirscene1 | urban | indoor | Myndir/nirscene1/urban/indoor/0021_rgb.tiff |
| nirscene1 | nature | water | Myndir/nirscene1/nature/water/0006_rgb.tiff |
| nirscene1 | urban | building | Myndir/nirscene1/urban/building/0058_rgb.tiff |
| places2 | urban | building | Myndir/places2/urban/building/Places365_val_00001177.jpg |
| nirscene1 | nature | rock | Myndir/nirscene1/nature/rock/0022_rgb.tiff |
| places2 | urban | streetview | Myndir/places2/urban/streetview/Places365_val_00001034.jpg |
| nirscene1 | nature | rock | Myndir/nirscene1/nature/rock/0024_rgb.tiff |
| nirscene1 | nature | water | Myndir/nirscene1/nature/water/0026_rgb.tiff |
| places2 | urban | object | Myndir/places2/urban/object/Places365_val_00001194.jpg |
| nirscene1 | nature | rock | Myndir/nirscene1/nature/rock/0009_rgb.tiff |
| nirscene1 | urban | indoor | Myndir/nirscene1/urban/indoor/0051_rgb.tiff |
| nirscene1 | urban | indoor | Myndir/nirscene1/urban/indoor/0001_rgb.tiff |
| places2 | urban | object | Myndir/places2/urban/object/Places365_val_00001041.jpg |
| nirscene1 | nature | field | Myndir/nirscene1/nature/field/forest0032_rgb.tiff |
| nirscene1 | nature | forest | Myndir/nirscene1/nature/forest/0024_rgb.tiff |
| nirscene1 | nature | water | Myndir/nirscene1/nature/water/0038_rgb.tiff |
| places2 | nature | rock | Myndir/places2/nature/rock/Places365_val_00000025.jpg |
| nirscene1 | nature | rock | Myndir/nirscene1/nature/rock/0029_rgb.tiff |
| places2 | urban | object | Myndir/places2/urban/object/Places365_val_00000654.jpg |
| places2 | nature | water | Myndir/places2/nature/water/Places365_val_00000897.jpg |
| places2 | urban | indoor | Myndir/places2/urban/indoor/Places365_val_00000914.jpg |
| places2 | nature | rock | Myndir/places2/nature/rock/Places365_val_00000714.jpg |
| places2 | nature | water | Myndir/places2/nature/water/Places365_val_00001591.jpg |
| nirscene1 | urban | indoor | Myndir/nirscene1/urban/indoor/0015_rgb.tiff |
| nirscene1 | nature | rock | Myndir/nirscene1/nature/rock/0025_rgb.tiff |
| places2 | urban | streetview | Myndir/places2/urban/streetview/Places365_val_00000759.jpg |
| places2 | urban | indoor | Myndir/places2/urban/indoor/Places365_val_00001291.jpg |
| places2 | nature | forest | Myndir/places2/nature/forest/Places365_val_00001238.jpg |
| nirscene1 | nature | field | Myndir/nirscene1/nature/field/forest0035_rgb.tiff |
| places2 | nature | forest | Myndir/places2/nature/forest/Places365_val_00000629.jpg |
| places2 | urban | streetview | Myndir/places2/urban/streetview/Places365_val_00000323.jpg |
| places2 | nature | field | Myndir/places2/nature/field/Places365_val_00001394.jpg |
| nirscene1 | nature | water | Myndir/nirscene1/nature/water/0021_rgb.tiff |
| places2 | nature | field | Myndir/places2/nature/field/Places365_val_00001161.jpg |
| nirscene1 | urban | indoor | Myndir/nirscene1/urban/indoor/0029_rgb.tiff |
| nirscene1 | nature | water | Myndir/nirscene1/nature/water/0083_rgb.tiff |
| nirscene1 | nature | forest | Myndir/nirscene1/nature/forest/0012_rgb.tiff |
| places2 | nature | field | Myndir/places2/nature/field/Places365_val_00000637.jpg |
| places2 | urban | streetview | Myndir/places2/urban/streetview/Places365_val_00000909.jpg |
| places2 | urban | indoor | Myndir/places2/urban/indoor/Places365_val_00000935.jpg |
| places2 | nature | water | Myndir/places2/nature/water/Places365_val_00001305.jpg |
| nirscene1 | urban | indoor | Myndir/nirscene1/urban/indoor/0019_rgb.tiff |
| nirscene1 | urban | indoor | Myndir/nirscene1/urban/indoor/0027_rgb.tiff |
| nirscene1 | nature | forest | Myndir/nirscene1/nature/forest/0058_rgb.tiff |
| places2 | urban | building | Myndir/places2/urban/building/Places365_val_00000290.jpg |
| places2 | nature | field | Myndir/places2/nature/field/Places365_val_00000716.jpg |
| nirscene1 | urban | streetview | Myndir/nirscene1/urban/streetview/0097_rgb.tiff |
| places2 | nature | field | Myndir/places2/nature/field/Places365_val_00000438.jpg |
| places2 | urban | indoor | Myndir/places2/urban/indoor/Places365_val_00001448.jpg |
| places2 | urban | streetview | Myndir/places2/urban/streetview/Places365_val_00001335.jpg |
| nirscene1 | nature | field | Myndir/nirscene1/nature/field/0008_rgb.tiff |
| places2 | nature | rock | Myndir/places2/nature/rock/Places365_val_00001180.jpg |
| places2 | nature | field | Myndir/places2/nature/field/Places365_val_00001469.jpg |
| nirscene1 | nature | rock | Myndir/nirscene1/nature/rock/0012_rgb.tiff |
| nirscene1 | urban | indoor | Myndir/nirscene1/urban/indoor/0003_rgb.tiff |
| nirscene1 | urban | indoor | Myndir/nirscene1/urban/indoor/0042_rgb.tiff |
| places2 | nature | rock | Myndir/places2/nature/rock/Places365_val_00000017.jpg |
| places2 | nature | water | Myndir/places2/nature/water/Places365_val_00001290.jpg |
| nirscene1 | nature | rock | Myndir/nirscene1/nature/rock/0030_rgb.tiff |
| nirscene1 | urban | building | Myndir/nirscene1/urban/building/building0006_rgb.tiff |
| places2 | urban | building | Myndir/places2/urban/building/Places365_val_00000784.jpg |
| places2 | nature | water | Myndir/places2/nature/water/Places365_val_00001236.jpg |
| places2 | urban | object | Myndir/places2/urban/object/Places365_val_00000252.jpg |
| places2 | urban | indoor | Myndir/places2/urban/indoor/Places365_val_00000657.jpg |
| places2 | urban | streetview | Myndir/places2/urban/streetview/Places365_val_00000228.jpg |
| nirscene1 | nature | forest | Myndir/nirscene1/nature/forest/forest0031_rgb.tiff |
| nirscene1 | urban | indoor | Myndir/nirscene1/urban/indoor/0046_rgb.tiff |
Myndir með eina byggingu í fyrrirrúmi eða sem leggja áherslu á einhvern eiginleika einnar byggingar.
n <- sample(1:10, 1)
files_df %>%
filter(subtype == 'building') %>%
slice(n) %>%
.[['slóð']] %>%
image_read %>%
plot()
Myndir sem eru teknar innandyra og sýna umhverfi, en ekki bara einn/fáeina hluti.
files_df %>%
filter(subtype == 'indoor') %>%
sample_n(., 1) %>%
.[['slóð']] %>%
image_read %>%
plot()
Mynd af hlut eða fyrirbæri sem er einkennandi fyrir borgarlíf bæði utan- og innandyra
files_df %>%
filter(subtype == 'object') %>%
slice(n) %>%
.[['slóð']] %>%
image_read %>%
plot()
Mynd tekin utandyra sem leggur ekki áherslu á einn sérstakan hlut.
files_df %>%
filter(subtype == 'streetview') %>%
slice(n) %>%
.[['slóð']] %>%
image_read %>%
plot()
Mynd sem einkennist af opnu svæði í náttúrunnu. Getur verið skyld öðrum flokkum en myndin einkennir engan af hinum flokkunum.
files_df %>%
filter(subtype == 'field') %>%
slice(n) %>%
.[['slóð']] %>%
image_read %>%
plot()
Mynd af skógi tekin innan úr skóginum eða nálægt skóginum þar sem skógurinn sjálfur er í fyrirrúmi, en ekki vatn/fjall/opið svæði osf.
files_df %>%
filter(subtype == 'forest') %>%
slice(n) %>%
.[['slóð']] %>%
image_read %>%
plot()
Mynd af fjalli/bergi, þ.e. einkennist af grjóti. Getur verið skógur eða vatn á myndinni en stein-fyrirbæri er í fyrirrúmi.
files_df %>%
filter(subtype == 'rock') %>%
slice(n) %>%
.[['slóð']] %>%
image_read %>%
plot()
Mynd með vatn sem aðaláherslu, stöðuvatn, á, sjór osf. Getur verið inni í skógi eða hjá fjalli osf en vatnið einkennir myndina.
files_df %>%
filter(subtype == 'water') %>%
slice(n) %>%
.[['slóð']] %>%
image_read %>%
plot()
files_df %>%
group_by(database) %>%
tally %>%
kable
| database | n |
|---|---|
| nirscene1 | 201 |
| places2 | 141 |
files_df %>%
group_by(database, type) %>%
tally %>%
kable
| database | type | n |
|---|---|---|
| nirscene1 | nature | 100 |
| nirscene1 | urban | 101 |
| places2 | nature | 62 |
| places2 | urban | 79 |
files_df %>%
group_by(database, type, subtype) %>%
tally %>%
kable
| database | type | subtype | n |
|---|---|---|---|
| nirscene1 | nature | field | 18 |
| nirscene1 | nature | forest | 27 |
| nirscene1 | nature | rock | 34 |
| nirscene1 | nature | water | 21 |
| nirscene1 | urban | building | 23 |
| nirscene1 | urban | indoor | 53 |
| nirscene1 | urban | streetview | 25 |
| places2 | nature | field | 17 |
| places2 | nature | forest | 14 |
| places2 | nature | rock | 15 |
| places2 | nature | water | 16 |
| places2 | urban | building | 14 |
| places2 | urban | indoor | 24 |
| places2 | urban | object | 15 |
| places2 | urban | streetview | 26 |
files_df %>%
group_by(database, type) %>%
summarize(n = n()) %>%
ggplot(aes(type, n, fill = database)) +
geom_col(position = 'dodge')
files_df %>%
group_by(database, subtype) %>%
summarize(n = n()) %>%
ggplot(aes(database, n, fill = subtype)) +
geom_col(position = 'dodge')
Það eru ekki allar myndirnar jafnstórar eða í sömu hlutföllum. Skoðum dreifingu stærðar og hlutfalla
files_df %>%
sample_n(100) %>%
mutate(mynd = map(slóð, readImage),
breidd = map_int(mynd, nrow),
hæð = map_int(mynd, ncol)) %>%
ggplot(aes(breidd/hæð)) +
geom_density() +
facet_wrap(~ database, scales = 'free') +
labs(title = 'dreifing á ratio (breidd/hæð) eftir gagnasafni') +
ggsave('ratiodens.png', device = 'png')
files_df %>%
sample_n(100) %>%
mutate(mynd = map(slóð, readImage),
breidd = map_int(mynd, nrow),
hæð = map_int(mynd, ncol)) %>%
ggplot(aes(breidd*hæð)) +
geom_density() +
facet_wrap(~ database, scales = 'free') +
labs(title = 'dreifing á stærð(breidd*hæð) eftir gagnasafni') +
ggsave('sizedens.png', device = 'png')
Við sjáum að places myndirnar eru mun dreifðari í hlutföllum auk þess að vera í verri upplausn.
files_df %>%
sample_n(100) %>%
mutate(mynd = map(slóð, readImage),
birtustig = map_dbl(mynd, mean)) %>%
ggplot(aes(birtustig)) +
geom_density() +
facet_wrap(~ database, scales = 'free') +
labs(title = 'dreifing á meðalbirtustigi eftir gagnasafni') +
ggsave('birtudens.png', device = 'png')
files_df %>%
sample_n(100) %>%
mutate(mynd = map(slóð, readImage),
birtustig = map_dbl(mynd, sd)) %>%
ggplot(aes(birtustig)) +
geom_density() +
facet_wrap(~ database) +
labs(title = 'dreifing á contrast eftir gagnasafni') +
ggsave('contrastdens.png', device = 'png')
Planið mitt er að sía burt myndir sem eru með of lágt eða of hátt ratio og líka myndir sem eru með of lága upplausn. Get svo komið myndunum í eina stærð. Ég hugsa að það gæti verið sniðugt að sía myndir sem ég stækka mikið með mjög veikum low-pass filter til að losna við rusl pixla frá stækkuninni. Skrái það náttla allt í bókhaldið. Kem svo myndunum á grayscale og aljafna luminance í kringum eitthvað meðaltal.