Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

AI study/potato's PJT (in dongguk)

[์ธํ„ด] R์˜ magick ํŒจํ‚ค์ง€๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ์ƒ‰์ƒ ์ถ”์ถœํ•˜๊ธฐ

๊ฐ์ž ๐Ÿฅ” 2021. 3. 12. 01:25
๋ฐ˜์‘ํ˜•

์‹œ์ž‘ํ•˜๋ฉฐ

6๊ฐœ์›”๊ฐ„ ITํšŒ์‚ฌ์—์„œ ์ธํ„ด์‹ค์Šต์„ ์ง„ํ–‰ํ•˜๋ฉฐ ๊ฐœ๋ฐœํ•˜๊ณ , ์นญ์ฐฌ๋ฐ›์•˜๋˜ ๊ฐœ์ธ ๊ณผ์—…์— ๋Œ€ํ•ด ์ž‘์„ฑํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.
ํšŒ์‚ฌ ๋‚ด์—์„œ ์‚ฌ์šฉํ–ˆ๋˜ ๊ธฐ์ˆ ์ด๋ฉด ๋Œ€์™ธ๋น„์•„๋‹ˆ์•ผ? ๋ผ๊ณ  ํ•  ์ˆœ ์žˆ๊ฒ ์ง€๋งŒ, 
ํ‡ด์‚ฌ ์ „, '์ƒ‰์ƒ์ถ”์ถœ๊ธฐ ๋ณด๊ณ '๋ฅผ ๋งˆ์น˜๊ณ  ์„ผํ„ฐ์žฅ๋‹˜๊ป˜์„œ '๋ญ ํ‡ด์‚ฌํ•˜๊ณ  ๊นƒํ—ˆ๋ธŒ์˜ฌ๋ฆฌ๋˜๊ฐ€~ ์ž˜ ์ €์žฅํ•ด๋‘ฌ ์ž˜ํ–ˆ๋„ค' ๋ผ๊ณ  ์นญ์ฐฌ์„ ํ•ด์ฃผ์…จ๊ธฐ์—, ๋‚ด๊ฐ€ ๊ฐœ๋ฐœํ–ˆ๋˜ '์ด๋ฏธ์ง€ ๋ถ„์„ ์ „์ฒ˜๋ฆฌ ํ”„๋กœ์„ธ์Šค' ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์‹œ์ž‘ํ•ด๋ณธ๋‹ค!

 

ํ”„๋กœ์ ํŠธ ๋ชฉ์ 

ํšŒ์‚ฌ ๋‚ด์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋‹ค์–‘ํ•œ AI ๋กœ์ง์— ์ ์šฉ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ด๋ฏธ์ง€ ์ƒ‰์ƒ์ถ”์ถœ๊ธฐ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ ์ž ํ•œ๋‹ค.

 

ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ

์ด๋ฏธ์ง€๋กœ๋ถ€ํ„ฐ ์‚ฌ๋žŒ ๋ˆˆ์œผ๋กœ๋„ ์ธ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ •ํ™•ํ•œ ์ƒ‰์ƒ์„ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.

์ง„ํ–‰ ์กฐ๊ฑด
์‚ฌ๋‚ด ๋กœ์ง์€ R ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, R๋กœ ๊ตฌํ˜„ํ•ด ๋ณผ ๊ฒƒ  --> ์ˆ˜์—… ์‹ค์Šต ์ดํ›„๋กœ ์ฒ˜์Œ ๋งŒ์ ธ๋ณด๋Š” R... ์–ด์ƒ‰ํ–ˆ๋‹ค.
function์œผ๋กœ ๊ตฌํ˜„ํ•  ๊ฒƒ
๋ถ€ํ•˜๊ฐ€ ์ ์€, ์ตœ๋Œ€ํ•œ ๋”ฅ๋Ÿฌ๋‹ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๋น ๋ฅธ ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•ด ๋ณผ ๊ฒƒ
๊ฒฐ๊ณผ๊ฐ’์ด ๋ฐ์ดํ„ฐ ํ™œ์šฉ ๊ฐ€๋Šฅ์„ฑ์˜ ์ธก๋ฉด์—์„œ ๋†’์•„์•ผ ํ•จ  --> ์ด๋ฏธ์ง€๋ฅผ ์ˆ˜์น˜ํ™” ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ๋‹ค์ง!

 

์ž‘์—… ์ฝ”๋“œ

1. library import

library(tibble)
library(magick)
library(dplyr)

R์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” magick ํ•จ์ˆ˜๊ฐ€ ๋ฉ”์ธ์ด๋‹ค

2. main

url1 ="https://%%%%%%%%.jpg"  
extract_colors(url1)

url : ์ƒ‰์ƒ์„ ์ถ”์ถœํ•˜๊ณ ํ”ˆ ์‚ฌ์ง„์˜ url์„ ๋ณ€์ˆ˜์— ์ €์žฅ
extract_colors() : ์ƒ‰์ƒ ์ถ”์ถœ ํ•จ์ˆ˜๋ฅผ ๋ฐ‘์—์„œ ์ •์˜ํ•  ๊ฒƒ์ด๊ณ , ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ url ๋กœ ๋ฐ›๋Š”๋‹ค.

3. ์ƒ‰์ƒ ์ถ”์ถœํ•˜๋Š” ํ•จ์ˆ˜ ์‚ดํŽด๋ณด๊ธฐ

3-1. ํ•จ์ˆ˜์ •์˜

extract_colors <- function(url) { $$$ }

ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋ฉฐ ์ฝ”๋“œ๋ฅผ ์‹œ์ž‘ํ–ˆ๊ณ , ์ด์ œ $$$ ์•ˆ์— ๋“ค์–ด๊ฐˆ ์ƒ‰์ƒ์ถ”์ถœ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž. 

3-2. Get Image

 #get image
 img1 <- image_crop(image_scale(image_read(url), 300), "200x200+50+50")
  • Image_read : url์„ ํ†ตํ•ด ์–ป์€ ์ด๋ฏธ์ง€๋ฅผ
  • Image_scale : 300 ํฌ๊ธฐ๋กœ ๊ฐ€์ ธ์˜จ ํ›„
  • Image_crop : ์ขŒ์šฐ ์•ž๋’ค 200, 200, 50, 50 ๋งŒํผ ์ž˜๋ผ์„œ img1 ์— ์ €์žฅํ•œ๋‹ค.
    • ์‚ฌ๋‚ด์—์„œ๋Š” ์ฃผ๋กœ '์ƒํ’ˆ'์ด๋ฏธ์ง€๋ฅผ ๋‹ค๋ค˜์—ˆ๋‹ค. ์ƒํ’ˆ์€ ๋Œ€๋ถ€๋ถ„ ๋ฐฐ๊ฒฝ ๊ฐ€์šด๋ฐ์— ์กด์žฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฏธ์ง€๋ฅผ crop ํ•ด์คฌ๋‹ค.

3-3. Color List ์ƒ์„ฑ

์ƒ‰์ƒ์„ ๋น ๋ฅด๊ฒŒ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.
๋ฏธ์ˆ ์—์„œ ๊ทธ๋ฆผ์„ ๊ทธ๋ฆด๋•Œ๋„, ํŒ”๋ ˆํŠธ์— ์žˆ๋Š” ์ƒ‰์ƒ์„ ๋ณด๊ณ  ๋ฌด์Šจ ์ƒ‰์„ ์น ํ• ๊นŒ! ๋ผ๊ณ  ๊ณ ๋ฏผํ•œ๋‹ค.
๊ทธ๋ž˜์„œ ๊ตฌ๊ธ€๋ง์„ ์ข€ ํ•˜๋‹ค๊ฐ€, ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐœ๋ฐœํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. 

์ฆ‰, hex code ์™€ ์ƒ‰์ƒ ์ด๋ฆ„์œผ๋กœ  ๊ตฌ์„ฑ๋œ ๋ฌธ์ž์—ด ๋ฒกํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

 color_dic <- setNames(
    c(#back_black
      "#000000ff",
      #black
      "#1d1e23ff", "#0a0a0aff", "#191919ff", "#323232ff", "#4b4b4bff",
      #pink
      "#ff00ffff","#ee82eeff", "#ff1493ff", "#ffc0cbff","#cba397ff","#ff4040ff",
      #orange
      "#ffa500ff","#ff4500ff","#ff8c00ff","#ff825aff", "#f4a460ff",
      #white
      "#ffffff00", "#fafafaff","#f0f0f0ff","#e6e6e6ff",
      #red
      "#ff0000ff","#cc0000ff","#dd221eff","#8b0000ff", "#9c1010ff",
      #yellow
      "#ffff00ff","#ffd700ff","#faf3d4ff", "#f9d537ff","#f5f0c5ff","#e0cf69ff",
      #lime/green
      "#7cfc00ff","#81c147ff", "#008000ff","#00a000ff","#006600ff","#90ee90ff",
      #khaki
      "#556b2fff","#4e6455ff",
      #teal      
      "#008080ff",
      #aqua/blue
      "#00ffffff", "#0000ffff","#87ceebff","#4169e1ff","#585997ff","#97b9bbff",
      #navy
      "#000080ff","#1e205cff", "#191970ff",
      #purple
      "#800080ff", "#7b68eeff", "#8a2be2ff", "#9578afff","#b5b0d6ff",
      #gray
      "#c0c0c0ff", "#a4aaa7ff","#959ea2ff","#616264ff", "#696969ff", "#a9a9a9ff","#d3d3d3ff",
      #brown
      "#916027ff", "#bd9750ff",
      #beige
      "#d2b48cff"
      ),
    
    c("background",
      "black","black2","black3", "black4", "black5",
      "pink","pink2","pink3","pink4","pink5","pink6",
      "orange","orange2","orange3","orange4","oragne5",
      "white","white2","white3", "white4",
      "red","red2","red3","red4","red5",
      "yellow","yellow2", "yellow3","yellow4", "yellow5","yellow6",
      "green","green2","green3","green4","green5","green6",
      "khaki", "khaki2",
      "teal",
      "blue","blue2","blue3","blue4","blue5","blue6",
      "navy", "navy2", "navy3",
      "purple","pruple2","purple3","purple4","purple5",
      "gray","gray2", "gray3","gray4","gray5","gray6","gray7",
      "brown","brown2",
      "beige"
      )
  )
  • color dic : set_names ๋ฅผ ํ™œ์šฉํ•˜์—ฌ '#000000' ๋ผ๊ณ  ์ ํ˜€์žˆ๋Š” ์ƒ‰์ƒ hex code ์— ์ด๋ฆ„์„ ๋ถ™์—ฌ์คฌ๋‹ค.
  • black, black2, black3...? 
    • ์‚ฌ์ง„ ์†์— ๊ฒ€์ •์ƒ‰ ์‹ ๋ฐœ์ด ์žˆ๋‹ค๊ณ  ์น˜๋ฉด, ๊ทธ ๊ฒ€์ •์ƒ‰์€ ์ง„ํ•œ๊ฒ€์ •, ์•ฝ๊ฐ„ ์—ฐํ•œ๊ฒ€์ • ์ •๋„์˜ ๋Š๋‚Œ์ด์ง€ ์‹ค์ œ๋กœ '#000000'์œผ๋กœ๊ตฌ์„ฑ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งค์šฐ๋งค์šฐ ๋“œ๋ฌผ๋‹ค.
    • ๋”ฐ๋ผ์„œ ์™„์ „ ์Œ”๊นŒ๋งŒ, ์ฐ ๊ฒ€์ •์ƒ‰์€ background๋ผ๊ณ  ๋ช…์นญํ•ด๋’€๋‹ค. (์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€๋ฉด, ๋‚˜์ค‘์— ์‹คํ–‰์ฝ”๋“œ ๋ณด๋ฉด ์ดํ•ดํ•  ๊ฒƒ์ด๋‹ค.)
  • ํ•œ๊ณ„์ 
    • rule based ์ด๊ธฐ์— ์ •ํ•ด์ง„ ์ƒ‰์ƒ๋งŒ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์น˜๋ช…์ ์ธ ๋‹จ์ ์ด ์กด์žฌํ•˜๊ธฐ์—, ๋ฐœ์ „์ด ๋” ํ•„์š”ํ•˜๋‹ค.

3-4. color palette ์ƒ์„ฑ

๋งŒ๋“ค์–ด ๋†“์€ color_dic์„ ์‹ค์ œ ์ƒ‰์ƒ์œผ๋กœ ๋ณ€ํ™˜์‹œ์ผœ์ฃผ๋Š” ๋‹จ๊ณ„์ด๋‹ค.
๋ฌธ์ž์—ด ๋ฒกํ„ฐ์— ์žˆ๋Š” hex code ๋ฅผ ๊ธฐ์ค€์œผ๋กœ magick ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค.

  for (i in seq_along(color_dic)) {
    fig_name <- paste0(names(color_dic)[i], "_pic")
    assign(
      fig_name,
      image_graph(width = 100, height = 100, res = 300)
    )
    par(mar = rep(0, 4))
    plot.new()
    rect(0, 0, 1, 1, col = color_dic[i], border = color_dic[i])
    assign(fig_name, magick::image_crop(get(fig_name), "50x50+10+10"))
    dev.off()
    rm(i, fig_name)
  }
  color_pal <- paste0(names(color_dic), "_pic")
  • rect(0,0,1,1, col = color_dic[i], border = color_dic[i])
    • color_dic ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ƒ‰์ƒ๋“ค์„ ์‚ฌ๊ฐํ˜•์œผ๋กœ ๋ถˆ๋Ÿฌ์™€์„œ ์ญ‰ ์ด์–ด์ฃผ๋ฉด์„œ color_pal ์„ ์ƒ์„ฑํ•œ๋‹ค.

 

3-5. color stand (์ƒ‰์ƒ ํ‘œ์ค€) ์ œ์ž‘

magick ํ˜•ํƒœ๋กœ ํ˜•์„ฑ๋œ ์ƒ‰์ƒ ์ด๋ฏธ์ง€๋ฅผ ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋กœ ๋ถ™์—ฌ์„œ ์ƒ‰์ƒ ํ‘œ์ค€ (standard) ๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
magick ํ˜•ํƒœ๋ž€, ์ถœ๋ ฅํ•˜๋ฉด ์ƒ‰์ƒ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ถœ๋ ฅ๋˜๊ณ  ์ด๋ฏธ์ง€๊ฐ€ ์‹ค์งˆ์ ์œผ๋กœ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฒƒ์„ ์‹ค์ œ ์šฐ๋ฆฌ๊ฐ€ ๋ˆˆ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ด๋ฏธ์ง€๋กœ ๋ณ€ํ˜•ํ•ด์ฃผ๋Š” ๋‹จ๊ณ„๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

  #color_stand ์ œ์ž‘
  color_stand <- c()
  for (i in 1:length(color_dic)) {
    color_stand <- append(color_stand, get(color_pal[i]), after = 0)
  }
  color_stand <- image_append(color_stand)
  

color_stand๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ด๋ฏธ์ง€๊ฐ€ ๋‚˜์˜จ๋‹ค.  (์ผ๋ถ€๋งŒ ์ถ”์ถœํ•ด ๋ดค๋‹ค)

color_stand

3-6. Image mapping

์ƒ‰์ƒ ์ถ”์ถœ์„ ์›ํ•˜๋Š” ์ด๋ฏธ์ง€๋กœ๋ถ€ํ„ฐ, ์ƒ‰์ƒํ‘œ์ค€์— ์žˆ๋Š” ์ƒ‰์ƒ์„ ์ถ”์ถœํ•ด๋ณธ๋‹ค.
image_map ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ณ , ์ด ํ•จ์ˆ˜๋Š” ์ด๋ฏธ์ง€์™€ ์ƒ‰์ƒํ‘œ์ค€์— ์กด์žฌํ•˜๋Š” color๋ฅผ ๋น„๊ตํ•˜์—ฌ, ๋™์ผํ•œ ์ƒ‰์ƒ๋“ค์„ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

#image mapping
img_mapped <- image_transparent(image_map(image = img, map = color_stand), color = "white")
img_trans <- image_map(image = img_mapped, map = color_stand)

์™ผ์ชฝ: ์‹ค์ œ ์‚ฌ์ง„ // ์˜ค๋ฅธ์ชฝ: img_trans ๊ฒฐ๊ณผ๋ฌผ
์›๋ณธ ์ด๋ฏธ์ง€๊ฐ€ ์—†์ง€๋งŒ, ์ด ์‚ฌ์ง„๋“ค์€ img_trans์˜ ๊ฒฐ๊ณผ๋ฌผ๋“ค ์ด๋‹ค.

  • img mapping ์„ ๋‘๋ฒˆํ•จ์œผ๋กœ์จ, ๋” ์ •ํ™•ํ•œ ์ƒ‰์ƒ๋งŒ์„ ๋ฝ‘์•„์˜ค๊ณ ์ž ํ–ˆ๋‹ค.
  • img_transparent ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ์ฒซ ๋ฒˆ์งธ ๋งคํ•‘๋œ ์‚ฌ์ง„์—์„œ white ๋ฅผ ๋ฐฐ๊ฒฝ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์ž๋™ ์ œ๊ฑฐ ํ•ด์คฌ๋‹ค.
  • ์ด๋ฏธ์ง€๊ฐ€ ๋งคํ•‘์ด ๋‘๋ฒˆ ์™„๋ฃŒ ๋œ img_trans ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ์˜ค๋ฅธ ์ชฝ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์ƒ‰์ƒ ํŒ”๋ ˆํŠธ์— ์žˆ๋Š” ์ƒ‰์ƒ๋งŒ ์ถ”์ถœ๋œ๋‹ค.

3-7. ์ถ”์ถœ๋œ ์ƒ‰์ƒ์˜ ๋นˆ๋„์ˆ˜์™€ ๊ตฌ์„ฑ ๋น„์œจ์„ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜ ๊ตฌํ˜„

# count color freq
  count_colors <- function(image) {
    data <- image_data(image) %>%
      apply(2:3, paste, collapse = "") %>% 
      as.vector %>% 
      table() %>%  #count
      as.data.frame() %>% 
      setNames(c("hex", "freq")) #col_name ์ง€์ •
    data$hex <- paste("#", data$hex, sep="") #data์— # ๋ถ™์—ฌ์คŒ
    return(data)
  }
  
  # get color rate
  get_color_rate <- function(img) {
    colors_in_dic <- img_trans %>%
      count_colors() %>%
      left_join(
        enframe(color_dic) %>% 
          rename(hex = value),
        by = "hex"
      ) %>% 
      arrange(desc(freq)) %>% 
      select(
        `colorName` = name, hexcode = hex,
        `Freq` = freq
      )
    colors_in_dic$colorName <- gsub("[0-9]","", colors_in_dic$colorName)
    colors_in_dic <- colors_in_dic %>% 
      select(c("colorName","Freq"))
    colors_in_dic <- colors_in_dic %>% 
      group_by(colorName) %>% 
      summarise(freq = sum(Freq)) %>% 
      as.data.frame() %>% 
      arrange(desc(freq)) %>% 
      filter(colorName != "background", freq > 100)
    colors_in_dic <- colors_in_dic %>% 
      mutate(Percent = 100 * round((freq/sum(freq)), 3)) %>% 
      filter(Percent > 1.0)
    return(colors_in_dic)
  }
  • ์ด๋ฏธ์ง€์˜ ์ƒ‰์ƒ์— ํฌํ•จ๋œ hex code ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ , ์ƒ‰์ƒ ์ด๋ฆ„์„ ์ฐพ์•„์ฃผ๊ณ  ๋นˆ๋„์ˆ˜, ๋น„์œจ์„ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.
  • blue, blue2, blue3... ์€ ๋’ค์— ์ˆซ์ž๋ฅผ ์—†์• ๋ฒ„๋ฆฌ๊ณ  blue ํ•˜๋‚˜๋กœ ํ†ต์ผ์‹œ์ผœ count ํ–ˆ๋‹ค.
  • background ์ƒ‰์ƒ์€ (์ดˆ๊ธฐ์— ์™„์ „ black์„ background๋ผ๊ณ  ์ง€์ •) count์—์„œ ์ œ์™ธ ์‹œ์ผœ์ค€๋‹ค.
  • Freq ๊ฐ€ 100 ์ดํ•˜์ธ ๊ฒƒ๊ณผ Percent ๊ฐ€ 1.0 ์ดํ•˜์ธ ๊ฒƒ์€ count์—์„œ ์ œ์™ธ ์‹œ์ผœ์คฌ๋‹ค.
color_rate <- get_color_rate(img_trans) ## color_rate ์‹คํ–‰

	# ํ•จ์ˆ˜ ๋งˆ์ง€๋ง‰์— ์ถœ๋ ฅ๊ฐ’์„ 'img_trans ์™€ rate ๋‘˜๋‹ค ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์–ด์„œ ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค์–ด์คฌ๋‹ค.
	re <- function(x, y) {
				    val.x <- x
				    val.y <- y
				    return(list(rate = val.x, pic = val.y))
				  }
  	result <- re(color_rate, img_trans)
 
 # ๋งจ ์ฒ˜์Œ extract_colors() ํ•จ์ˆ˜์˜ ๋‹ซํžˆ๋Š” ๋ถ€๋ถ„์ด๋‹ค.
 return(result)  # ํ•จ์ˆ˜ ๋งจ ๋งˆ์ง€๋ง‰ return ๊ฐ’์„ result๋กœ ๋ฐ›์•„์˜จ๋‹ค.
 }
 colorName  freq Percent
1     black 15482    67.2
2      gray  4405    19.1
3     white  1876     8.1
4     khaki   445     1.9
5     green   417     1.8

์ถœ๋ ฅ ๊ฒฐ๊ณผ ) ์ด๋ ‡๊ฒŒ ์‚ฌ์ง„๊ณผ, color rate๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

 

3.8. ๋ฒกํ„ฐํ™”

๋งˆ์ง€๋ง‰์œผ๋กœ ์˜ค๋ฅธ์ชฝ์— ์ถœ๋ ฅ๋œ rate ๋ฅผ ๋ฒกํ„ฐํ™” ์‹œํ‚ค๋ฉด, ํ•ด๋‹น ์‚ฌ์ง„์˜ ์ƒ‰์ƒ ์ •๋ณด๋ฅผ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฉด์—์„œ ํ™œ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋ฐœํ‘œํ–ˆ๋‹ค. color stand ์— ์žˆ๋Š” ์ƒ‰์ƒ์˜ ์ˆ˜ ๋งŒํผ์˜ ์ฐจ์›์„ ๊ฐ€์ง„ ๋ฒกํ„ฐ๋กœ ์ถœ๋ ฅํ–ˆ๋‹ค!

 

ํ•œ๊ณ„์  (๊ผญ ๋‹ค์‹œ ๊ฐœ๋ฐœํ•ด ๋ณผ ๊ฒƒ)

1. rule base ๊ธฐ๋ฐ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ์ƒ‰์ƒ์ด ์ถ”๊ฐ€๋˜๋ฉด, ๊ตฌ๋ถ„ํ•˜๊ธฐ ์–ด๋ ต๋‹ค. (์•„๋ž˜์ฒ˜๋Ÿผ ํŒŒ์Šคํ…” ์ƒ‰์€ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์—ฐํ•œ ํŒŒ์Šคํ…” (์—ฐ๋‘์ƒ‰)์„ ์ถ”์ถœํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.)

์™ผ์ชฝ : ์›๋ณธ์‚ฌ์ง„ // ์˜ค๋ฅธ์ชฝ : ๊ฒฐ๊ณผ


2. ํ˜„์žฌ ์ •ํ•ด์ ธ ์žˆ๋Š” ์ƒ‰์ƒ์ด ์•„๋‹ˆ๋ฉด ๊ตฌ๋ณ„์ด ํž˜๋“ค๋‹ค. (์•„๋ž˜ ์›๋ณธ์‚ฌ์ง„์˜ ์ฑ ์ฝœ์ƒ‰์ด ๋”ฐ๋กœ ์ง€์ •๋˜์–ด์žˆ์ง€ ์•Š์•„์„œ, ์‹œ์Šคํ…œ์ƒ์œผ๋กœ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ณด๋ผ์ƒ‰์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ. --> color_dic์— ๋“ค์–ด๊ฐ€์žˆ๋Š” ์ƒ‰์ƒ์ด ๋งŽ์•„์•ผ ์ œ๋Œ€๋กœ ๋œ ๊ตฌ๋ณ„์ด ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋‹ค..)

์™ผ์ชฝ: ์›๋ณธ์‚ฌ์ง„ // ์˜ค๋ฅธ์ชฝ : ๊ฒฐ๊ณผ


3. ๋ฐฐ๊ฒฝ์„ ์ž๋™์œผ๋กœ ์ œ๊ฑฐํ•˜๋Š” ๊ณผ์ •์—์„œ ์ƒ๊ธฐ๋Š” ๋…ธ์ด์ฆˆ๋Š” ์žก๊ธฐ ํž˜๋“ค๋‹ค. ์‹ค์ œ๋กœ ์•„๋ž˜ ์ž์ „๊ฑฐ ์‚ฌ์ง„์€, ๋…ธ์ด์ฆˆ ๋ฐœ์ƒ์œผ๋กœ ์ธํ•ด ์ƒ‰์ƒ์˜ ๋น„์œจ์ด white ๊ฐ€ ๋†’๊ฒŒ ์ถœ๋ ฅ๋˜์—ˆ๋‹ค. ์ด๋Ÿฐ ๋…ธ์ด์ฆˆ๋ฅผ ์žก๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋” ์ •๊ตํ•œ ๋ชจ๋ธ์ด ํ•„์š”ํ•  ๊ฒƒ์ด๋‹ค.

์™ผ์ชฝ : ์›๋ณธ์‚ฌ์ง„ // ์˜ค๋ฅธ์ชฝ : ๊ฒฐ๊ณผ

4. transparents ํ•จ์ˆ˜๋กœ ๋ฐฐ๊ฒฝ์„ white๋กœ ์ง€์ •ํ•ด์„œ ์ œ๊ฑฐํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฐ๊ฒฝ์ƒ‰์ด ์™„์ „ํ•œ ํ•˜์–€์ƒ‰์ด ์•„๋‹ ๊ฒฝ์šฐ๋Š” ์ƒํ’ˆ์˜ ์ƒ‰์ƒ์„ ํŠน์ •์ง“๊ธฐ ํž˜๋“ค๋‹ค. (๊ทธ๋ฆผ์ž๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ๊ฒฝ์ด ์ œ๊ฑฐ๋˜์ง€ ๋ชปํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฒ€์ •์ƒ‰์ด ๋Œ€๋ถ€๋ถ„์ธ ์ด์–ดํฐ์ด, white ๋น„์œจ์ด ๋†’๊ฒŒ ๋‚˜ํƒ€๋‚ฌ๋‹ค.)

์™ผ์ชฝ : ์›๋ณธ์‚ฌ์ง„ // ์˜ค๋ฅธ์ชฝ : ๊ฒฐ๊ณผ

 

๋งˆ์น˜๋ฉฐ

๊ฐœ๋ฐœ์ดˆ๊ธฐ, ๋ฏธ์ˆ™ํ•œ ๋‹จ๊ณ„์ผ ๋•Œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ ์ œ๋Œ€๋กœ ์ฃผ์„์ด ๋‹ฌ๋ ค์žˆ์ง€๋„, ๋ณ€์ˆ˜๋ช…์ด ์ •ํ™•ํ•˜๊ณ  ๊น”๋”ํ•˜์ง€๋„ ๋ชปํ•˜๋‹ค. ์•ž์œผ๋กœ ๋” ๋‚˜์€ ์ฝ”๋”ฉ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•ด์•ผ๊ฒ ๋‹ค. ์—ญ์‹œ ๋‚จ๋“ค์ด ์•Œ์•„๋ณด๊ฒŒ๋” ์ฝ”๋”ฉ์„ ํ•˜๊ธฐ๋ž€ ์ •๋ง ์‰ฝ์ง€ ์•Š๋‹ค. ์ง€๊ธˆ ๋‚˜์˜ ์ฝ”๋“œ๋ฅผ ์„ค๋ช…ํ•˜๋Š”๊ฒƒ๋„ ๋˜๊ฒŒ ์šฐ์™•์ขŒ์™• ํ•˜๋‹ค... ๋‚˜๋ฆ„ ํšŒ์‚ฌ์—์„œ ์ผ์„ ๋ฐฐ์šฐ๋ฉด์„œ ์—ด์‹ฌํžˆ ๋ฌธ์„œํ™”๋ฅผ ํ•ด๋†”์„œ ์ด์ •๋„ ์ธ๊ฒƒ ๊ฐ™์ง€๋งŒ, ๋” ๋…ธ๋ ฅํ•ด์„œ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์Šคํ‚ฌ๊นŒ์ง€ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•˜๋Š” ๊ทธ๋‚ ๊นŒ์ง€,,,, .. ๋ธ”๋กœ๊ทธ ์—…๋กœ๋“œ ํ•ด๋ด์•ผ์ง•... 

 

์•„ ๊ทธ๋ฆฌ๊ณ , ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์ •๋ง... ๋งŽ์ด ์นญ์ฐฌ๋ฐ›์•˜๋‹ค. ๋ฐฉ๋ฒ•์ด ์‹ ๋ฐ•ํ–ˆ๊ณ , ๋ฐ์ดํ„ฐ ํ™œ์šฉ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•˜๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค. 
์ธํ„ด์„ ํ•˜๋ฉด์„œ ํ•œ ๊ฒฝํ—˜์ด ์ •๋ง ๋งŽ๊ณ , ๊ฐ’์ง€๊ณ  ๋„ˆ๋ฌด ์–ป์€๊ฒŒ ๋งŽ๊ธฐ์— ๋”ฐ๋กœ ํ›„๊ธฐ๋ฅผ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ•œ๋‹ค:)

๋ฐ˜์‘ํ˜•