int main(void){ int **R, **G, **B, **Y, **F, **L; int hist[256]; int boader; int label_num; R = (int **)IAllocImage(640,480); // 画像領域(赤)を確保 G = (int **)IAllocImage(640,480); // 画像領域(緑)を確保 B = (int **)IAllocImage(640,480); // 画像領域(青)を確保 Y = (int **)IAllocImage(640,480); // 画像領域(グレースケール)を確保 F = (int **)IAllocImage(640,480); // 画像領域(二値)を確保 L = (int **)IAllocImage(640,480); // 画像領域(ラベル付)を確保 GInit(640,480); // Windowの生成 ILoadPpmImage("abstmix.ppm",R,G,B); // ppmファイルの読み込み TranslateGrayScale(R,G,B,Y); // グレースケールに変換 MakeHistogram(Y,hist); // ヒストグラム作成 DisplayColorImage(Y,Y,Y); boader = Percentile(Y,hist,0.92); TranslateBoolScale(Y,F,boader); // パーセンタイル法で2値化 remove_noise(F,13); label_num=labeling(F,L); DisplayColorImage(F,F,F); printf("label_num=%d\n",label_num); printLabelingData(L,label_num); GWaitLoop(); // 終了処理 exit(EXIT_SUCCESS); }
int main(void){ int **R, **G, **B, **Y, **F; int hist[256]; double per; // パーセンタイル法におけるpの値 int boader; R = (int **)IAllocImage(640,480); // 画像領域(赤)を確保 G = (int **)IAllocImage(640,480); // 画像領域(緑)を確保 B = (int **)IAllocImage(640,480); // 画像領域(青)を確保 Y = (int **)IAllocImage(640,480); // 画像領域(グレースケール)を確保 F = (int **)IAllocImage(640,480); // 画像領域(二値)を確保 GInit(640,480); // Windowの生成 ILoadPpmImage("abstmix.ppm",R,G,B); // ppmファイルの読み込み TranslateGrayScale(R,G,B,Y); // グレースケールに変換 MakeHistogram(Y,hist); // ヒストグラム作成 DisplayColorImage(Y,Y,Y); printf("input per\n"); while(EOF!=scanf("%lf",&per)){ // パーセンタイル法で二値化 printf("per=%g,black=%g\n",per,IE*JE*per); boader = Percentile(Y,hist,per); printf("boader=%d\n",boader); TranslateBoolScale(Y,F,boader); remove_noise(F,0); DisplayColorImage(F,F,F); } GWaitLoop(); // 終了処理 exit(EXIT_SUCCESS); }
double Histogram::Median() const { return Percentile(50.0); }