function filter(src, out) {
  var img = new Image();
  img.src = src;
  img.onload = function() {
    out.outerHTML = "<img src='" + pseudo_color(img) + "'>";
  };
}

function pseudo_color(img) {
  // キャンバスに画像をセットする
  var canvas = document.createElement("canvas");
  var ctx = canvas.getContext("2d");
  canvas.width  = img.width;
  canvas.height = img.height;
  ctx.drawImage(img, 0, 0);
  var src = ctx.getImageData(0, 0, img.width, img.height);
  var dst = ctx.createImageData(img.width, img.height);
  // フィルタ処理
  for (var i = 0; i < src.data.length; i = i+4) {
    // 画像のrgbから輝度を算出する
    var luminance = Math.floor(( 0.298912 * src.data[i] + 0.586611 * src.data[i+1] + 0.114478 * src.data[i+2] ));
    // 疑似カラー割り当て
    var red   = luminance + 39;
    var green = luminance + 14;
    var blue  = luminance - 36;
    if (luminance > 240) {
      red   = 255;
      green = 255;
      blue  = 255;
    } else if (luminance > 200) {

    } else if (luminance > 150) {
      green -= 50;
      blue  -= 50;
    } else if (luminance > 100) {
      red   -= 50;
      blue  -= 50;
    } else if (luminance > 10) {
      red   -= 50;
      green -= 50;
      blue  += 100;
    } else {
      red   = 0;
      green = 0;
      blue  = 0;
    }

    dst.data[i]   = Math.max(0, Math.min(255, red));
    dst.data[i+1] = Math.max(0, Math.min(255, green));
    dst.data[i+2] = Math.max(0, Math.min(255, blue));
    dst.data[i+3] = 255;
  }
  // フィルタ処理した画像をキャンバスに吐き出す
  ctx.putImageData(dst, 0, 0);
  // dataURL形式にファイルを変換する
  var dataurl = canvas.toDataURL("image/jpeg");
  return dataurl;
}