Advertisement
stuppid_bot

Untitled

Jan 24th, 2016
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var WHITE_SMILE = '😠'
  2.   , BLACK_SMILE = '😡'
  3.   , SIZE = 17;
  4. function otsu(histogram, pixelsNumber) {
  5.     var sum = 0
  6.       , sumB = 0
  7.       , wB = 0
  8.       , wF = 0
  9.       , mB
  10.       , mF
  11.       , max = 0
  12.       , between
  13.       , threshold = 0;
  14.     for (var i = 0; i < 256; ++i) {
  15.       wB += histogram[i];
  16.       if (wB == 0)
  17.         continue;
  18.       wF = pixelsNumber - wB;
  19.       if (wF == 0)
  20.         break;
  21.       sumB += i * histogram[i];
  22.       mB = sumB / wB;
  23.       mF = (sum - sumB) / wF;
  24.       between = wB * wF * Math.pow(mB - mF, 2);
  25.       if (between > max) {
  26.         max = between;
  27.         threshold = i;
  28.       }
  29.     }
  30.     return threshold;
  31. }
  32. var img = document.getElementsByTagName('img')[0]
  33.   , cnv = document.createElement('canvas')
  34.   , ctx = cnv.getContext('2d'),
  35.   lines = Array(SIZE)
  36.   ;
  37. img.width = img.height = SIZE;
  38. cnv.width = img.width;
  39. cnv.height = img.height;
  40. ctx.drawImage(imgCopy, 0, 0);
  41. var imData = ctx.getImageData(0, 0, cnv.width, cnv.height)
  42.   , histogram = Array(256)
  43.   , i
  44.   , j
  45.   , k
  46.   , red
  47.   , green
  48.   , blue
  49.   , gray;
  50. for (i = 0; i < 256; ++i)
  51.     histogram[i] = 0;
  52. for (i = 0; i < imData.data.length; i += 4) {
  53.   red = imData.data[i];
  54.   blue = imData.data[i + 1];
  55.   green = imData.data[i + 2];
  56.   // alpha = imData.data[i + 3];
  57.   // https://en.wikipedia.org/wiki/Grayscale
  58.   gray = red * .2126 + green * .07152 + blue * .0722;
  59.   histogram[Math.round(gray)] += 1;
  60. }
  61. var threshold = otsu(histogram, imData.data.length / 4);
  62. console.log("threshold = %s", threshold);
  63. for (i = 0; i < imData.height; ++i) {
  64.   lines[i] = "";
  65.   for (j = imData.height * i * 4, k = j + imData.width * 4; ++j) {
  66.     lines[i] += imData.data[i] > threshold ? WHITE_SMILE : BLACK_SMILE;
  67.   }
  68. }
  69.  
  70. console.log(lines.join('\n'));
  71.  
  72. /*
  73. 😠😠😠😠😠😠😠😠😡😠😠😠😠😠😠😠😠
  74. 😠😠😠😠😠😠😠😡😡😡😠😠😠😠😠😠😠
  75. 😠😠😠😠😠😠😡😡😡😡😠😠😠😠😠😠😠
  76. 😠😠😠😠😠😡😡😡😡😠😠😠😠😠😠😠😠
  77. 😠😠😠😠😡😡😡😡😠😠😠😡😡😠😠😠😠
  78. 😠😠😠😠😡😡😡😠😠😠😡😡😡😡😠😠😠
  79. 😠😠😠😠😠😡😡😡😠😡😡😡😡😡😡😠😠
  80. 😠😡😠😠😠😠😡😡😡😡😡😠😡😡😡😡😠
  81. 😡😡😡😠😠😠😠😡😡😡😠😠😠😡😡😡😡
  82. 😠😡😡😡😠😠😡😡😡😡😡😠😠😠😡😡😠
  83. 😠😠😡😡😡😡😡😡😠😡😡😡😠😠😠😠😠
  84. 😠😠😠😡😡😡😡😠😠😠😡😡😡😠😠😠😠
  85. 😠😠😠😠😡😡😠😠😠😡😡😡😡😠😠😠😠
  86. 😠😠😠😠😠😠😠😠😡😡😡😡😠😠😠😠😠
  87. 😠😠😠😠😠😠😠😡😡😡😡😠😠😠😠😠😠
  88. 😠😠😠😠😠😠😠😡😡😡😠😠😠😠😠😠😠
  89. 😠😠😠😠😠😠😠😠😡😠😠😠😠😠😠😠😠
  90. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement