読者です 読者をやめる 読者になる 読者になる

プログ

’14修了無内定理系院卒の活動雑記||プー太郎ログ||プログラミング雑記

フィルタ名を考えるのが難しい

明日に用事が入っているため,今日はあとは公開するだけの状態まで持って行きたかったんですが,中々思うように行きませんでした.


とりあえず昨日心残りだったHSV色相環の件を解決

function cvExpand(imgId, srcImage, mode){
//画像サイズを指定して画像領域を確保
	var dstImage = cvCreateImage(srcImage.width, srcImage.height);
  var max = Math.sqrt(dstImage.width*dstImage.width + dstImage.height*dstImage.height/4);

	for(var i = 0 ; i < srcImage.height ; i++){
		for(var j = 0 ; j < srcImage.width ; j++){
      var alpha = getAlphas(srcImage,i,j,3); 
      if(alpha[4]===0&&alpha[8]!==0||alpha[7]!==0||alpha[6]!==0||alpha[5]!==0||alpha[3]!==0||alpha[2]!==0||alpha[1]!==0||alpha[0]!==0){
      var v = Math.sqrt((j-dstImage.width/2)*(j-dstImage.width/2)*4 + (i-dstImage.height/2)*(i-dstImage.height/2)*4);
        switch(mode){
          case 'rainbow':
            var x = j-srcImage.width/2;
            var y = i-srcImage.height/2;
            var r = Math.sqrt(x*x+y*y);
            var R = Math.sqrt((srcImage.width*srcImage.width)+(srcImage.height*srcImage.height))/4;
            var theta = Math.atan2(y,x)/(Math.PI/180);
            dstImage.RGBA[(j+i*dstImage.width)*CHANNELS+0] = 255*(theta+180)/360;//H
            dstImage.RGBA[(j+i*dstImage.width)*CHANNELS+1] = 128*r/R;//S
            dstImage.RGBA[(j+i*dstImage.width)*CHANNELS+2] = 255;//V
            dstImage.RGBA[(j+i*dstImage.width)*CHANNELS+3] = 255;//V
            break;
            //略
        }
      }
      else{
        dstImage.RGBA[(j + i * dstImage.width) * CHANNELS + 0] = 0; //R
        dstImage.RGBA[(j + i * dstImage.width) * CHANNELS + 1] = 0; //G
        dstImage.RGBA[(j + i * dstImage.width) * CHANNELS + 2] = 0; //B
        dstImage.RGBA[(j + i * dstImage.width) * CHANNELS + 3] = 0; //A
      }
    }
  }
  if(mode==='rainbow')
  cvCvtColor(dstImage,dstImage,CV_CODE.HSV2RGB); 
  var newIplImage = cvCloneImage(srcImage);
  //imgIdで指定したimgタグに画像を転送
  cvShowImage(imgId, dstImage);
}

atan(y/x) だとうまくいかないのに atan2(y,x) だとうまくいくのは0除算の関係かな?S と V については色々いじってみたけどイマイチしっくり来る値がない.

あとは基本的にUI周りを整えたいんだけど現状使えそうなフィルタが少ないのが心残りという.でもまぁ5月中に公開したいのでUIを先に片付けなければならない.後はjsファイルを一般化できずにどんどん複製して改良していったので旧方式と新形式でズレてるとことかのチェックやそれに伴う動作漏れのチェックをしないと・・・

参考
HSV色空間 - Wikipedia
atan関数 - Mathクラス - JavaScript入門