<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:blogChannel="http://backend.userland.com/blogChannelModule" >
  <channel>
  <title>やぶろぐ</title>
  <link>http://mmyb.blog.shinobi.jp/</link>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://mmyb.blog.shinobi.jp/RSS/" />
  <description>自分の勉強した内容（プログラミング等）
に関するメモなどを綴る日記</description>
  <lastBuildDate>Thu, 17 Jul 2008 13:50:59 GMT</lastBuildDate>
  <language>ja</language>
  <copyright>© Ninja Tools Inc.</copyright>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" />

    <item>
    <title>画像処理の課題</title>
    <description>
    <![CDATA[まぁjavaといってもProcessingになるんですが<br />
<br />
人間の髪の毛（というか黒い物体）にロックオンカーソル<br />
を合わせると反応するプログラム作ってみました<br />
<br />
まぁ課題のためなんですけどね<br />
<br />
でもまぁ出来が悪いなぁというのが自分の正直な感想です<br />
<br />
ちなみに以下のプログラム<br />
<br />
import processing.video.*;<br />
<br />
Capture img;<br />
PImage result;<br />
int label[];<br />
<br />
int cnt = 0;<br />
int label_num;<br />
int L_BASE = 50;<br />
int timer=0;<br />
<br />
float thresh = 30.0;<br />
boolean lockflag;<br />
<br />
void setup(){<br />
  colorMode(RGB);<br />
  size(480, 320);<br />
  img = new Capture(this, width, height, 30);<br />
  result = createImage(width, height, RGB);<br />
  label = new int[width*height];<br />
}  <br />
<br />
<br />
void draw(){<br />
  if (img.available()) {<br />
    img.read();<br />
   <br />
  //二値化<br />
  binalize(img, label);    <br />
  //ラベリング処理<br />
  label_num = labeling(img, label, L_BASE);  <br />
  println(label_num);<br />
  <br />
  <br />
  image(img,0,0);  <br />
  timer++;<br />
    }  <br />
<br />
rectMode(CENTER);<br />
stroke(0,0,255);<br />
line(width/4,0,width/4,height);<br />
line(width*3/4,0,width*3/4,height);<br />
<br />
if(label[width*mouseY+mouseX]>50) lockflag=true;<br />
else lockflag=false;<br />
<br />
PFont ft = loadFont("MS-PGothic-48.vlw");<br />
textFont(ft,40);<br />
if(lockflag==true){<br />
  text("LOCK ON!",20,50);<br />
}else if(lockflag==false)text("LOST",20,50);<br />
<br />
noFill();<br />
if(lockflag==true){<br />
  stroke(255,0,0);<br />
  ellipse(mouseX,mouseY,40,40);<br />
}else if(lockflag==false){<br />
  stroke(0,0,255);<br />
}<br />
ellipse(mouseX,mouseY,20,20);<br />
ellipse(mouseX,mouseY,30,30);<br />
textFont(ft,15);<br />
stroke(0,0,255);<br />
text(""+mouseX+","+mouseY,mouseX+5,mouseY+5);<br />
<br />
<br />
<br />
line(mouseX,0,mouseX,result.width);<br />
line(0,mouseY,result.width,mouseY);<br />
<br />
<br />
if(mousePressed){<br />
  if(lockflag==true){<br />
    textFont(ft,40);<br />
    fill(255,0,0);<br />
    text("HIT!",200,200);<br />
    ellipse(mouseX,mouseY,200,200);<br />
  }else if(lockflag == false){<br />
    textFont(ft,40);<br />
    fill(0,0,255);<br />
    text("MISS!",200,200);<br />
  }<br />
  stroke(0,0,255);<br />
  lockflag = false;<br />
}<br />
<br />
}<br />
<br />
<br />
<br />
<br />
//2値化<br />
void binalize(PImage img_, int[] label_){<br />
  for(int j=0;j<img_.height;j++){<br />
    for(int i=0;i<img_.width;i++){<br />
      if(brightness(img_.get(i,j))<thresh){<br />
         label_[img_.width*j+i] = 1;<br />
      }<br />
      else{<br />
        label_[img_.width*j+i] = 0;<br />
      }<br />
    }<br />
  }<br />
}<br />
<br />
//ラベリング<br />
int labeling(PImage img_, int[] label_, int label_num){<br />
  for(int i=0;i<img_.width*img_.height;i++){<br />
    if(label_[i]==1){<br />
      if(label_num>=img_.width*img_.height){<br />
        println("ERROR!! TOO MANY LABELS.");<br />
      }<br />
      label_[i]=label_num;<br />
      for(;;){<br />
        int cnt=0;<br />
        for(int j=img_.width+1;j<img_.width*(img_.height-1)-1;j++){<br />
          if(label_[j]==label_num){<br />
            if(label_[j+img_.width]==1){<br />
              label_[j+img_.width]=label_num; cnt++;}<br />
            if(label_[j+img_.width-1]==1){<br />
              label_[j+img_.width-1]=label_num; cnt++;}<br />
            if(label_[j-1]==1){<br />
              label_[j-1]=label_num; cnt++;}<br />
            if(label_[j-img_.width-1]==1){<br />
              label_[j-img_.width-1]=label_num; cnt++;}<br />
            if(label_[j-img_.width]==1){<br />
              label_[j-img_.width]=label_num; cnt++;}<br />
            if(label_[j-img_.width+1]==1){<br />
              label_[j-img_.width+1]=label_num; cnt++;}<br />
            if(label_[j+1]==1){<br />
              label_[j+1]=label_num; cnt++;}<br />
            if(label_[j+img_.width+1]==1){<br />
              label_[j+img_.width+1]=label_num; cnt++;}<br />
           }<br />
        }<br />
        if(cnt==0) break;<br />
      }<br />
      label_num++;<br />
    }<br />
  }<br />
  return label_num;<br />
}<br />
<br />
<br />
<br />
ちなみにこれ、ラベリングのところなどは先生が作ったソースのこぴぺなんですよね・・・<br />
<br />
あぁ情けない・・・<br />
]]>
    </description>
    <category>java</category>
    <link>http://mmyb.blog.shinobi.jp/java/%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86%E3%81%AE%E8%AA%B2%E9%A1%8C</link>
    <pubDate>Thu, 17 Jul 2008 13:50:59 GMT</pubDate>
    <guid isPermaLink="false">mmyb.blog.shinobi.jp://entry/3</guid>
  </item>
    <item>
    <title>画像処理課題</title>
    <description>
    <![CDATA[画像処理の授業で書いているprocessingのソース<br />
<br />
画像を分割して、各部分ごとに異なる比率でコンボりゅーションをしようとしているのですが、今のところ上手くいってないんですよね<br />
<br />
<br />
来週までにどうにかせねば・・・<br />
<br />
<br />
import processing.video.*;<br />
<br />
int fream = 3;<br />
int offset = 0;<br />
<br />
<br />
Capture video;<br />
PImage [] img  = new PImage[fream];<br />
PImage result;<br />
<br />
float[][] c_matrix = {{0,-1,0},<br />
                      {0,1,0},<br />
                      {0,0,0}};<br />
<br />
                     <br />
void setup(){<br />
  size(640,480);<br />
  colorMode(RGB);<br />
  video = new Capture(this,width,height,10);<br />
  for(int i=0;i<frame;i++){<br />
    img[i] = createImage(width,height,RGB);<br />
  }<br />
  result = createImage(width,height,RGB);<br />
}<br />
<br />
void draw(){<br />
  if(video.available()){<br />
    offset++;<br />
    if(offset == fream){<br />
      offset=0;<br />
    }<br />
    video.read();<br />
    result.loadPixels();<br />
    for (int y = 0; y < video.height; y++) { <br />
      for (int x = 0; x < video.width; x++) { <br />
        img[offset].pixels[y*video.width + x] = video.pixels[y*video.width + x];<br />
      }<br />
    }<br />
    for (int y = 0; y < video.height; y++) { <br />
      for (int x = 0; x < video.width; x++) { <br />
        float r_sum = 0.0,g_sum = 0.0,b_sum = 0.0;<br />
       for(int w = 0; w< 3;w++){<br />
        for(int h = 0;h < 3;h++){<br />
         int tmp_x = x + h -1;<br />
         int tmp_y = y + w -1;<br />
         int tmp = img[offset].width * tmp_y + tmp_x;<br />
         tmp = constrain(tmp,0,img[offset].pixels.length-1);<br />
         <br />
         r_sum += (red(img.pixels[tmp]) * c_matrix[w][h]);<br />
         g_sum += (green(img.pixels[tmp]) * c_matrix[w][h]);<br />
         b_sum += (blue(img.pixels[tmp]) * c_matrix[w][h]);<br />
        }<br />
       }<br />
       r_sum = constrain(r_sum,0,255);<br />
       g_sum = constrain(g_sum,0,255);<br />
       b_sum = constrain(b_sum,0,255);<br />
       <br />
       color c = color(255-r_sum,255-g_sum,255-b_sum);<br />
       int tmp = x + y * img.width;<br />
       result.pixels[tmp] = c;<br />
       <br />
        if((offset+1+y*frame_num/480)<frame_num) result.pixels[y*video.width + x] = img[offset+1+y*frame_num/480].pixels[y*video.width + x];<br />
        else result.pixels[y*video.width + x] = img[(offset+1+y*frame_num/480)%frame_num].pixels[y*video.width + x];<br />
      }<br />
    }<br />
]]>
    </description>
    <category>java</category>
    <link>http://mmyb.blog.shinobi.jp/java/%E7%94%BB%E5%83%8F%E5%87%A6%E7%90%86%E8%AA%B2%E9%A1%8C</link>
    <pubDate>Wed, 02 Jul 2008 14:30:17 GMT</pubDate>
    <guid isPermaLink="false">mmyb.blog.shinobi.jp://entry/2</guid>
  </item>
    <item>
    <title>はじめまして</title>
    <description>
    <![CDATA[どうも矢部です

ちょっとSunSPOT目当てでブログを解説しまして・・・ｗ

とりあえず学校の課題などが中心になると思いますが

自分の書いたプログラムなどをせっせとアップしていく予定です

たまたま見た方が

「ここをこう直したほうがいいよ」

とかご助言いただけたら幸いです]]>
    </description>
    <category>その他</category>
    <link>http://mmyb.blog.shinobi.jp/%E3%81%9D%E3%81%AE%E4%BB%96/%E3%81%AF%E3%81%98%E3%82%81%E3%81%BE%E3%81%97%E3%81%A6</link>
    <pubDate>Tue, 01 Jul 2008 02:21:41 GMT</pubDate>
    <guid isPermaLink="false">mmyb.blog.shinobi.jp://entry/1</guid>
  </item>

    </channel>
</rss>