ですが現在どこをいじればいいのかわからず、困っています。数値をいじったりして動かしてはいるのですが、どうすればいいのかわからないため質問させていただきます。
余計なメモ書きがあって見にくいかもしれませんが、コードを載せておきます。
#define Th_sabun 15 //背景差分の閾値
#define Th_UGOKI 64*2
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <windows.h>
#include <mmsystem.h>
#include "misc.h"
#include "pgm.h"
#include "gm.h"
#include "ppm.h"
#include "ii.h"
int sabun_r[720][480];
int sabun_g[720][480];
int sabun_b[720][480];
double psnr(Ppm *ppm1, Ppm *ppm2);
double heikin(unsigned char *val, int gasoptr);
#define maxb(x) ((x>255) ? 255:x)
#define maxmin(x) ((x<0) ? 0 : max(x))
#define min0(x) ((x>0) ? x:0)
#define N 10
inline double saturate(double x){ return ((x>0.0)?(x<1.0)?x:1.0:0.0); }
inline double saturate2(double x){ return ((x>0.0)?(x<255.0)?x:255.0:0.0); }
//100902 グローバル変数。出力する画像の画素値を、保存しておく変数
//unsigned char *colorr;
unsigned char colorg[720][480];
//unsigned char *colorb;
Pixel *p;
Pixel *p2;
Pixel *p3;
//100902 動きのあるブロックか否かを保持する変数。
int kouho[720/8][480/8];
// 拡大倍率。この実験では1.0を入れておいて下さい。
//#define RatioH 1.0
//#define RatioW 1.0
int saishuu_doutai[720][480];
unsigned char gaso_f[720*480];//いじくった
unsigned char gaso_b[720*480];//いじくった
int gaso_f_ptr;
int gaso_b_ptr;
int main(int argc, char *argv[])
{
Pgm *pgmIn, *pgmOut;
Ppm *ppmIn1, *ppmIn2, *ppmOut;
int newWidth, newHeight;
int u,v;
int x,y;
int x1,x2,y1,y2;
int goukei_r, goukei_g, goukei_b;
int goukei_g_min;
int u_min;
int v_min;
IiPpmNb *nb1;
IiPpmNb *nb2;
int i,j,k,l;
double suuji;
int kido1, kido2;
int sabun;
int kouho_tmp;
int kouho_ryouiki;
int check; //人がいるっぽいと認識した数
DWORD dwTime_prev, dwTime;
if(argc < 3){
printf("iitest gazou ggazou\n");
return -1;
}
// PPMファイルの読み込み ppmInというポインタ変数に、入力した画像の画素値が入力される。
ppmIn1=ppmRead(argv[1]);
// ppmIn2=ppmRead(argv[2]);
// ppmInの書式:
newWidth=ppmIn1->width; //画像の幅
newHeight=ppmIn1->height; //画像の高さ
nb1=iiPpmNbCreate(1, 1);
// nb2=iiPpmNbCreate(1, 1);
// printf("背景差分の閾値を %d にセットしました。\n", Th_sabun);
// suuji = psnr(ppmIn1, ppmIn2);
// printf("%f \n", suuji);
//100902 画像を書き込む準備をする。
ppmOut = ppmCreate(newWidth, newHeight, PpmMaxPixel);
p = (Pixel *)calloc(sizeof(Pixel), newWidth*newHeight);
//puts("1");
//100902 背景差分の処理をする部分を作る。
//
dwTime_prev = GetTickCount();
gaso_f_ptr =0; //131212追加
gaso_b_ptr =0; //131212追加
//
//
//ここに、新処理を加える。
//
//
for(i=1; i<ppmIn1->height-1; i++){
for(j=1; j<ppmIn1->width-1; j++){
//3色変数
double r00, g00, b00, r10, g10,b10 ,r20 , g20, b20, r01;
double g01, b01, r11, g11, b11, r21, g21, b21, r02, g02;
double b02, r12, g12, b12, r22, g22, b22;
//平均値変数
double average_r, average_b, average_g;
//ファイル①
// 元の画像の画素を取り出している そのまま +1 +1
iiPpmNbPlace(nb1, ppmIn1, j+0, i+0); //座標 (-1,-1) → (0,0)
r00 = nb1->p[0][0].r; //赤 z10 → r00; //左上赤
g00 = nb1->p[0][0].b; //青 z11 → b00; //左上青
b00= nb1->p[0][0].g; //緑
iiPpmNbPlace(nb1, ppmIn1, j+1, i+0); //座標 (0,-1) → (1,0)
r10 = nb1->p[0][0].r; //赤
g10 = nb1->p[0][0].b; //青
b10 = nb1->p[0][0].g; //緑 z15 → g10; //上緑
iiPpmNbPlace(nb1, ppmIn1, j+2, i+0); //座標 (+1,-1) → (2,0)
r20 = nb1->p[0][0].r; //赤
g20 = nb1->p[0][0].b; //青
b20 = nb1->p[0][0].g; //緑
iiPpmNbPlace(nb1, ppmIn1, j+0, i+1); //座標 (-1, 0) → (0,1)
r01 = nb1->p[0][0].r; //赤
g01 = nb1->p[0][0].b; //青
b01 = nb1->p[0][0].g; //緑
iiPpmNbPlace(nb1, ppmIn1, j+1, i+1); //座標
r11 = nb1->p[0][0].r; //赤
g11 = nb1->p[0][0].b; //青
b11 = nb1->p[0][0].g; //緑
iiPpmNbPlace(nb1, ppmIn1, j+2, i+1); //座標
r21 = nb1->p[0][0].r; //赤
g21 = nb1->p[0][0].b; //青
b21 = nb1->p[0][0].g; //緑
iiPpmNbPlace(nb1, ppmIn1, j+0, i+2); //座標
r02 = nb1->p[0][0].r; //赤
g02 = nb1->p[0][0].b; //青
b02= nb1->p[0][0].g; //緑
iiPpmNbPlace(nb1, ppmIn1, j+1, i+2); //座標
r12 = nb1->p[0][0].r; //赤
g12 = nb1->p[0][0].b; //青
b12 = nb1->p[0][0].g; //緑
iiPpmNbPlace(nb1, ppmIn1, j+2, i+2); //座標
r22 = nb1->p[0][0].r; //赤
g22 = nb1->p[0][0].b; //青
b22 = nb1->p[0][0].g; //緑
//新画素平均 左上 上 右上 左 自分 右 左下 下 右下
double filterX[3][3] = {
{1.0,2,1},
{2,4,2},
{1,2,1}
};
double mult = 16.0;
double Lx;// = ((filterX[0][0]*z10) +(filterX[0][1]*z13) + (filterX[0][2]*z16) +(filterX[1][0]*z19) + (filterX[1][1]*z22) +(filterX[1][2]*z25) + (filterX[2][0]*z28) +(filterX[2][1]*z31) + (filterX[2][2]*z34)) *mult; ///// x成分
Lx = ((filterX[0][0]*r00) +(filterX[0][1]*r10) + (filterX[0][2]*r20) +(filterX[1][0]*r01) + (filterX[1][1]*r11) +(filterX[1][2]*r21) + (filterX[2][0]*r02) +(filterX[2][1]*r12) + (filterX[2][2]*r22)) /mult;
average_r = Lx;//saturate2(Ld*thetaR); ///// r成分
//緑
Lx = ((filterX[0][0]*g00) +(filterX[0][1]*g10) + (filterX[0][2]*g20) +(filterX[1][0]*g01) + (filterX[1][1]*g11) +(filterX[1][2]*g21) + (filterX[2][0]*g02) +(filterX[2][1]*g12) + (filterX[2][2]*g22)) /mult;
average_b = Lx;//saturate2(Ld*thetaG); ///// g成分
//青
Lx = ((filterX[0][0]*b00) +(filterX[0][1]*b10) + (filterX[0][2]*b20) +(filterX[1][0]*b01) + (filterX[1][1]*b11) +(filterX[1][2]*b21) + (filterX[2][0]*b02) +(filterX[2][1]*b12) + (filterX[2][2]*b22)) /mult;
average_g = Lx;//saturate2(Ld*thetaB); ///// b成分
p->r = (unsigned char)(average_r); //r成分の画素値を書き込む
p->b = (unsigned char)(average_b); //b成分の画素値を書き込む
p->g = (unsigned char)(average_g); //g成分の画素値を書き込む
PpmPixel(ppmOut, i, j) = *p++;
}
}
ppmWrite(argv[2], ppmOut);
printf("done.\n");
}
double psnr(Ppm *ppm1, Ppm *ppm2){
int i,j;
IiPpmNb *nb1;
IiPpmNb *nb2;
double psnr_r, psnr_g, psnr_b;
double add_r, add_g, add_b;
double psnrout;
nb1=iiPpmNbCreate(1, 1);
nb2=iiPpmNbCreate(1, 1);
add_r = 0.0;
add_g = 0.0;
add_b = 0.0;
for (i=0; i<ppm1->height; i++)
for (j=0; j<ppm1->width-1; j++){
iiPpmNbPlace(nb1, ppm1, j, i);
iiPpmNbPlace(nb2, ppm2, j, i);
add_r += (double)((nb1->p[0][0].r - nb2->p[0][0].r)*(nb1->p[0][0].r - nb2->p[0][0].r));
add_g += (double)((nb1->p[0][0].g - nb2->p[0][0].g)*(nb1->p[0][0].g - nb2->p[0][0].g));
add_b += (double)((nb1->p[0][0].b - nb2->p[0][0].b)*(nb1->p[0][0].b - nb2->p[0][0].b));
}
add_r /= (ppm1->height*ppm1->width);
add_g /= (ppm1->height*ppm1->width);
add_b /= (ppm1->height*ppm1->width);
psnr_r = 10.0 * log(65536.0/add_r);
psnr_g = 10.0 * log(65536.0/add_g);
psnr_b = 10.0 * log(65536.0/add_b);
printf("R:%f G:%f B:%f \n", psnr_r, psnr_g, psnr_b);
psnrout=(psnr_r + psnr_g + psnr_b)/3.0;
return psnrout;