2007年7月26日 星期四

DCT Code (參考學姊,略為修改)

void DCT(int DCTW,int DCTH)
{
  for(u = 0;u < v =" 0;v" dbtemp1 =" 0;" dbtemp2 =" 0;" dbtemp3 =" 0;" u ="="" cu =" (double)1/"> 0)
        Cu = 1;
      if(v == 0)
        Cv = (double)1/ sqrt(2);
      else if(v > 0)
        Cv = 1;
      for(i = 0;i < 8;i++)
      {
        for(j = 0;j < 8;j++)
        {
          dbTemp1 += (Im1Y[DCTH+i][DCTW + j]-128) * cos((2*i+1) * u * M_PI/16) * cos((2*j+1) * v * M_PI/16);
          dbTemp2 += (Im1Cb[DCTH+i][DCTW + j]-128) * cos((2*i+1) * u * M_PI/16) * cos((2*j+1) * v * M_PI/16);
          dbTemp3 += (Im1Cr[DCTH+i][DCTW + j]-128) * cos((2*i+1) * u * M_PI/16) * cos((2*j+1) * v * M_PI/16);
        }
      }
//陣列還沒改變需要更改
      Im1DCTY[DCTH+u][DCTW+v] = (Cu * Cv * dbTemp1)/(double)4;
      Im1DCTCb[DCTH+u][DCTW+v] = (Cu * Cv * dbTemp2)/(double)4;
      Im1DCTCr[DCTH+u][DCTW+v] = (Cu * Cv * dbTemp3)/(double)4;

      Im1QuaY[DCTH+u][DCTW+v]= Im1DCTY[DCTH+u][DCTW+v]/YQT[u][v];
      Im1QuaCb[DCTH+u][DCTW+v]=Im1DCTCb[DCTH+u][DCTW+v]/CbCrQT[u][v];
      Im1QuaCr[DCTH+u][DCTW+v]=Im1DCTCr[DCTH+u][DCTW+v]/CbCrQT[u][v];

    }
  }
  i = DCTW;
  j = DCTH;
}

2007年7月19日 星期四

Arduino-程式碼(講師提供)

int a = 2;
int b = 3;
int reset = 4;
int clock = 5;
int sw1 = 13;
int sw2 = 12;
int val1 = 0;
int val2 = 0;

void setup()
{
  beginSerial(9600);
  pinMode(a,OUTPUT);
  pinMode(b,OUTPUT);
  pinMode(reset,OUTPUT);
  pinMode(clock,OUTPUT);
  pinMode(sw1,INPUT);
  pinMode(sw2,INPUT);
}

void loop()
{
  digitalWrite(reset,1);
  val1 = digitalRead(sw1);
  val2 = digitalRead(sw2);
  if (val1==1&&val2==0){
   inputOn();
   clockRun();
  }
  if (val1==1&&val2==1){
   inputOff();
   clockRun();
  }
}

void clockRun()
{
  digitalWrite(clock,1);
  delay(100);
  digitalWrite(clock,0);
  delay(100);
}
void inputOn()
{
  digitalWrite(a,1);
  digitalWrite(b,1);
}
void inputOff()
{
  digitalWrite(a,0);
  digitalWrite(b,0);
}
void resetall()
{
  digitalWrite(reset,1);
  digitalWrite(reset,0);
  digitalWrite(reset,1);
}

Arduino-程式碼(紅綠燈)

int greenPin=11;
int redPin=10;
int yellowPin=9;
int value=0;

void setup(){
 pinMode(greenPin,OUTPUT);
 pinMode(redPin,OUTPUT);
 pinMode(yellowPin,OUTPUT);
}

void loop(){
 if(value==0)
 {
  digitalWrite(greenPin,HIGH);
  digitalWrite(redPin,LOW);
  digitalWrite(yellowPin,LOW);
  delay(5000);
  value=1;
 }
 if(value==1)
 {
  digitalWrite(redPin,LOW);
  digitalWrite(greenPin,LOW);
  digitalWrite(yellowPin,HIGH);
  delay(1000);
  value=2;
 }
 if(value==2)
 {
  digitalWrite(yellowPin,LOW);
  digitalWrite(greenPin,LOW);
  digitalWrite(redPin,HIGH);
  delay(2000);
  value=0;
 }
}
//這是我自己寫的....

Arduino-圖片

[Class1:讓綠燈閃爍]
[Class2:紅綠燈(各自設定課題)]

[Class 3:本課程最終目標,麵包版(only)]

[Class 3:同上,全圖版本]




2007年7月17日 星期二

JSteg

Input: message, cover image
Output: stego image
while data left to embed do
    get next DCT coefficient from cover image
    if DCT ≠ 0 and DCT ≠ 1 then
      get next LSB from message
      replace DCT LSB with message LSB
    end if
    insert DCT into stego image
end while

這是JSteg的Algorithm

DCT coefficients



第一支程式作業,寫出DCT coefficients的Histogram
下圖是,用J-Stego藏過資料後的Histogram

卡方攻擊法



p->1時,越有可能藏資料
p->0時,越不可能藏資料