mirror of
https://github.com/ryantimpe/brickr.git
synced 2026-01-06 05:39:34 -06:00
Brick grouping function
This commit is contained in:
138
0_Playground.R
138
0_Playground.R
@@ -79,13 +79,11 @@ lego_colors <- lego_colors %>%
|
||||
mutate_at(vars(starts_with("w_")), funs(ifelse(is.na(.), 0, .)))
|
||||
|
||||
convert_to_lego_colors <- function(R, G, B){
|
||||
dat <- lego_colors %>%
|
||||
lego_colors %>%
|
||||
mutate(dist = ((R_lego - R)^2 + (G_lego - G)^2 + (B_lego - B)^2)^(1/2)) %>%
|
||||
top_n(-1, dist) %>%
|
||||
rename(Lego_name = Color) %>%
|
||||
mutate(Lego_color = rgb(R_lego, G_lego, B_lego))
|
||||
|
||||
return(dat %>% select(Lego_name, Lego_color))
|
||||
mutate(Lego_color = rgb(R_lego, G_lego, B_lego)) %>%
|
||||
select(Lego_name = Color, Lego_color)
|
||||
}
|
||||
|
||||
legoize <- function(image){
|
||||
@@ -113,80 +111,74 @@ ggplot(l_img2, aes(x=x, y=y, fill = Lego_color)) +
|
||||
#Combine bricks into larger ones
|
||||
#Give each theoretical brick a unique ID
|
||||
|
||||
l_img3 <- l_img2 %>%
|
||||
select(x=x2, y=y2, Lego_name, Lego_color) %>%
|
||||
#4x2 bricks - horizontal
|
||||
group_by(xg = x %/% 4, yg = y %/% 2) %>%
|
||||
mutate(g_1_x4y2_0 = ifelse(length(unique(Lego_name)) == 1 & n() == 8,
|
||||
paste0("x4y2_", "x", min(x), "_y", min(y)), NA)) %>%
|
||||
ungroup() %>%
|
||||
#4x2 bricks - vertical
|
||||
group_by(xg = x %/% 2, yg = y %/% 4) %>%
|
||||
mutate(g_2_x2y4_0 = ifelse(length(unique(Lego_name)) == 1 & n() == 8,
|
||||
paste0("x2y4_", "x", min(x), "_y", min(y)), NA)) %>%
|
||||
ungroup() %>%
|
||||
#2x2 bricks
|
||||
group_by(xg = x %/% 2, yg = y %/% 2) %>%
|
||||
mutate(g_5_x2y2_0 = ifelse(length(unique(Lego_name)) == 1 & n() == 4,
|
||||
paste0("x2y2_", "x", min(x), "_y", min(y)), NA)) %>%
|
||||
ungroup() %>%
|
||||
#4x1 bricks - horizontal
|
||||
group_by(xg = x %/% 4, yg = y ) %>%
|
||||
mutate(g_7_x4y1_0 = ifelse(length(unique(Lego_name)) == 1 & n() == 4,
|
||||
paste0("x4y1_", "x", min(x), "_y", min(y)), NA)) %>%
|
||||
ungroup() %>%
|
||||
#4x1 bricks - vertical
|
||||
group_by(xg = x, yg = y %/% 4) %>%
|
||||
mutate(g_8_x1y4_1 = ifelse(length(unique(Lego_name)) == 1 & n() == 4,
|
||||
paste0("x1y4_", "x", min(x), "_y", min(y)), NA)) %>%
|
||||
ungroup() %>%
|
||||
#3x1 bricks - horizontal
|
||||
group_by(xg = x %/% 3, yg = y ) %>%
|
||||
mutate(g_7_x3y1_0 = ifelse(length(unique(Lego_name)) == 1 & n() == 3,
|
||||
paste0("x3y1_", "x", min(x), "_y", min(y)), NA)) %>%
|
||||
ungroup() %>%
|
||||
#3x1 bricks - vertical
|
||||
group_by(xg = x, yg = y %/% 3) %>%
|
||||
mutate(g_8_x1y3_1 = ifelse(length(unique(Lego_name)) == 1 & n() == 3,
|
||||
paste0("x1y3_", "x", min(x), "_y", min(y)), NA)) %>%
|
||||
ungroup() %>%
|
||||
#2x1 bricks - horizontal
|
||||
group_by(xg = x %/% 2, yg = y ) %>%
|
||||
mutate(g_9_x2y1_0 = ifelse(length(unique(Lego_name)) == 1 & n() == 2,
|
||||
paste0("x2y1_", "x", min(x), "_y", min(y)), NA)) %>%
|
||||
ungroup() %>%
|
||||
#2x1 bricks - vertical
|
||||
group_by(xg = x, yg = y %/% 2) %>%
|
||||
mutate(g_10_x1y2_1 = ifelse(length(unique(Lego_name)) == 1 & n() == 2,
|
||||
paste0("x1y2_", "x", min(x), "_y", min(y)), NA)) %>%
|
||||
ungroup() %>%
|
||||
#1x1
|
||||
mutate(g_11_x1y1_0 = paste0("x1y1_", "x", x, "_y", y)) %>%
|
||||
select(-xg, -yg)
|
||||
collect_bricks <- function(image){
|
||||
img <- image %>%
|
||||
select(x, y, Lego_name, Lego_color) %>%
|
||||
#4x2 bricks - horizontal
|
||||
group_by(xg = x %/% 4, yg = y %/% 2) %>%
|
||||
mutate(g_1_x4y2_0 = ifelse(length(unique(Lego_name)) == 1 & n() == 8,
|
||||
paste0("x4y2_", "x", min(x), "_y", min(y)), NA)) %>%
|
||||
#4x2 bricks - vertical
|
||||
ungroup() %>% group_by(xg = x %/% 2, yg = y %/% 4) %>%
|
||||
mutate(g_2_x2y4_0 = ifelse(length(unique(Lego_name)) == 1 & n() == 8,
|
||||
paste0("x2y4_", "x", min(x), "_y", min(y)), NA)) %>%
|
||||
#2x2 bricks
|
||||
ungroup() %>% group_by(xg = x %/% 2, yg = y %/% 2) %>%
|
||||
mutate(g_5_x2y2_0 = ifelse(length(unique(Lego_name)) == 1 & n() == 4,
|
||||
paste0("x2y2_", "x", min(x), "_y", min(y)), NA)) %>%
|
||||
#4x1 bricks - horizontal
|
||||
ungroup() %>% group_by(xg = x %/% 4, yg = y ) %>%
|
||||
mutate(g_7_x4y1_0 = ifelse(length(unique(Lego_name)) == 1 & n() == 4,
|
||||
paste0("x4y1_", "x", min(x), "_y", min(y)), NA)) %>%
|
||||
#4x1 bricks - vertical
|
||||
ungroup() %>% group_by(xg = x, yg = y %/% 4) %>%
|
||||
mutate(g_8_x1y4_1 = ifelse(length(unique(Lego_name)) == 1 & n() == 4,
|
||||
paste0("x1y4_", "x", min(x), "_y", min(y)), NA)) %>%
|
||||
#3x1 bricks - horizontal
|
||||
ungroup() %>% group_by(xg = x %/% 3, yg = y ) %>%
|
||||
mutate(g_7_x3y1_0 = ifelse(length(unique(Lego_name)) == 1 & n() == 3,
|
||||
paste0("x3y1_", "x", min(x), "_y", min(y)), NA)) %>%
|
||||
#3x1 bricks - vertical
|
||||
ungroup() %>% group_by(xg = x, yg = y %/% 3) %>%
|
||||
mutate(g_8_x1y3_1 = ifelse(length(unique(Lego_name)) == 1 & n() == 3,
|
||||
paste0("x1y3_", "x", min(x), "_y", min(y)), NA)) %>%
|
||||
#2x1 bricks - horizontal
|
||||
ungroup() %>% group_by(xg = x %/% 2, yg = y ) %>%
|
||||
mutate(g_9_x2y1_0 = ifelse(length(unique(Lego_name)) == 1 & n() == 2,
|
||||
paste0("x2y1_", "x", min(x), "_y", min(y)), NA)) %>%
|
||||
#2x1 bricks - vertical
|
||||
ungroup() %>% group_by(xg = x, yg = y %/% 2) %>%
|
||||
mutate(g_10_x1y2_1 = ifelse(length(unique(Lego_name)) == 1 & n() == 2,
|
||||
paste0("x1y2_", "x", min(x), "_y", min(y)), NA)) %>%
|
||||
ungroup() %>%
|
||||
#1x1
|
||||
mutate(g_11_x1y1_0 = paste0("x1y1_", "x", x, "_y", y)) %>%
|
||||
select(-xg, -yg)
|
||||
|
||||
img2 <- img %>%
|
||||
gather(Brick, brick_id, dplyr::starts_with("g_")) %>%
|
||||
#Only keep first Brick group has a name
|
||||
group_by(x, y) %>%
|
||||
filter(Brick == Brick[min(which(!is.na(brick_id)))]) %>%
|
||||
ungroup() %>%
|
||||
# min/max coord for geom_rect()
|
||||
group_by(brick_id) %>%
|
||||
mutate(xmin = min(x)-0.5, xmax = max(x)+0.5,
|
||||
ymin = min(y)-0.5, ymax = max(y)+0.5) %>%
|
||||
ungroup() %>%
|
||||
select(Brick, brick_id, xmin, xmax, ymin, ymax, Lego_color, Lego_name)
|
||||
|
||||
return(img2)
|
||||
}
|
||||
|
||||
l_img4 <- l_img3 %>%
|
||||
gather(Brick, brick_id, dplyr::starts_with("g_")) %>%
|
||||
#Only keep first Brick group that is true...biggest ones are first!
|
||||
group_by(x, y) %>%
|
||||
filter(Brick == Brick[min(which(!is.na(brick_id)))]) %>%
|
||||
ungroup()
|
||||
|
||||
l_img5 <- l_img4 %>%
|
||||
group_by(brick_id) %>%
|
||||
mutate(brick_size = n()) %>% #HMMMnot perfect. some overlap with assignments
|
||||
ungroup() %>%
|
||||
group_by(brick_id) %>%
|
||||
mutate(xmin = min(x)-0.5, xmax = max(x)+0.5,
|
||||
ymin = min(y)-0.5, ymax = max(y)+0.5) %>%
|
||||
ungroup() %>%
|
||||
select(Brick, brick_id, xmin, xmax, ymin, ymax, Lego_color, Lego_name)
|
||||
l_img5 <- collect_bricks(l_img2)
|
||||
|
||||
ggplot(l_img5) +
|
||||
geom_rect(aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,
|
||||
fill = Lego_color), color = "#333333")+
|
||||
scale_fill_identity() +
|
||||
geom_point(data = l_img2, aes(x=x2, y=y2),
|
||||
color = "#666666", alpha = 0.2, shape = 1, size = 3) +
|
||||
geom_point(data = l_img2, aes(x=x, y=y),
|
||||
color = "#333333", alpha = 0.2, shape = 1, size = 3) +
|
||||
coord_fixed(expand = FALSE) +
|
||||
theme_minimal()+
|
||||
theme(panel.background = element_rect(fill = "#999999"),
|
||||
|
||||
Reference in New Issue
Block a user