diff --git a/0_Playground.R b/0_Playground.R index 0e47dce..4c01600 100644 --- a/0_Playground.R +++ b/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"),