Advertisement
stuppid_bot

Untitled

Oct 14th, 2013
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function getGrayScale(img) {  
  2.     var cnv = document.createElement('canvas');
  3.     var ctx = cnv.getContext('2d');
  4.     ctx.drawImage(img, 0, 0);
  5.     var data = ctx.getImageData(0, 0, img.width, img.height).data;      
  6.     var color;
  7.     var i = 0;
  8.     var length = data.length;
  9.     var red;
  10.     var green;
  11.     var blue;
  12.     // var alpha;
  13.     var grayScale;
  14.     var out = new Array(img.height);
  15.     var index = -1;
  16.     out.depth = img.width;
  17.     while (i < length) {
  18.         red = data[i];
  19.         green = data[i + 1];
  20.         blue = data[i + 2];
  21.         // alpha = data[i + 3];
  22.         grayScale = Math.round(0.3 * red + 0.59 * green + 0.11 * blue);
  23.         out[++index] = grayScale;
  24.         i += 4;
  25.     }
  26.     return out;
  27. }
  28.  
  29. function getHistogram(data) {
  30.     var out = Array.apply(null, new Array(256)).map(Number.prototype.valueOf, 0);
  31.     for (var i = 0; i < data.length; ++i)
  32.         ++out[data[i]];
  33.     return out;
  34. }
  35.  
  36. // http://www.labbookpages.co.uk/software/imgProc/otsuThreshold.html
  37. function otsuThreshold(histogram, total) {
  38.     // вычислим контрольную сумму
  39.     var sum = 0;    
  40.     for (var i = 1; i < histogram.length; ++i)
  41.         sum += i * histogram[i];
  42.     var sumB = 0;
  43.     var wB = 0;
  44.     var wF = 0;
  45.     var max = 0;
  46.     var mB;
  47.     var mF;
  48.     var mid;
  49.     var out = 0;
  50.     for (var i = 1; i < histogram.length; ++i) {
  51.         wB += histogram[i];
  52.         wF = total - wB;
  53.         if (!wF)
  54.             break;
  55.         sumB += i * histogram[i];
  56.         mB = sumB / wB;
  57.         mF = (sum - sumB) / wF;
  58.         mid = wB * wF * Math.pow(mB - mF, 2);
  59.         if (mid > max) {
  60.             max = mid;
  61.             out = i;
  62.         }
  63.     }
  64.     return out;
  65. }
  66.  
  67. // http://ati.su/img/3515947f83d9212729cb36f8f1b7c5e9ec883fcd.jpeg
  68. // http://ati.su/img/49ce64b5d6a2e3f1a7a34e876cf5946b376748a5.jpeg
  69. var img = document.getElementsByTagName('img')[0];
  70. // для начала представим изображение в виде массива оттенков серого
  71. var arr = getGrayScale(img);
  72. // вычислим частоту с которой встречается каждый цвет
  73. var histogram = getHistogram(arr);
  74. var threshold = otsuThreshold(histogram, arr.length);
  75. for (var i = 0; i < arr.length; ++i) {
  76.     arr[i] = 1 * (arr[i] < threshold);
  77. }
  78. var i = 0;
  79. while (i < arr.length) {
  80.     console.log(arr.slice(i, i + arr.depth).join(''));
  81.     i += arr.depth;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement