画像処理のプログラムについて
初めまして、こんにちは
C言語で画像処理のプログラミングについてご解答をお願いします
現在二値化した白黒バーコードに対して、ビット数埋め込みというものを行っています
この画像に埋め込んだビットを、検出するプログラムを作成したいのですがどうしたらいいでしょうか?
ソースコードは以下です
int x,y,i,j;
double Th = 128.0; /*2値化の際のしきい値 */
int x_StartPos, y_StartPos,x_EndPos,y_EndPos; /*バーコードが描画されている領域の座標 */
int num;
y=0;
while (y<biHeight){
x=0;
while(x<biWidth){
if (Y[y][x]<Th) break;
x++;
}
if (x < biWidth){
x_StartPos = x;
y_StartPos = y;
break;
}
y++;
}
if ((x_StartPos==0) && (y_StartPos==0))
{
printf("画像中に黒領域が見つかりませんでした");
exit(-1);
}
x_EndPos=0;
while (x<biWidth){
/*画面右までスキャンして、一番右端の黒のx座標を求める*/
if (Y[y][x] < Th)/* 黒い点であったら */
x_EndPos=x;
x++;
}
if (x_EndPos==0) {
printf(" バーコード右端が検出できませんでした\n");
exit(-1);
}
/*バーコード一番上のラインにおける、黒の画素の数を数える*/
x=y_StartPos;
y=y_StartPos;
num=0; //これまでに検出した黒画素の数
while(x<=x_EndPos){
if (Y[y][x] < Th) // 黒い点であったら
num++; //黒画素数を +1 する
x++;
}
*start_x= x_StartPos;
*start_y= y_StartPos;
*end_x = x_EndPos;
*num_of_blackpixels =num;
}
void Embed_watermark(double Y[Y_SIZE][X_SIZE],double Y_out[Y_SIZE][X_SIZE],
int sukasi[], int Length, int x_StartPos, int y_StartPos, int x_EndPos)
{
int x,y;
int bitnum;
double Th = 128.0; /*2値化の際のしきい値 */
for(y=0;y<biHeight;y++) //出力データに元データをコピー
for(x=0;x<biWidth;x++)
Y_out[y][x]=Y[y][x];
bitnum=0; //現在何番目のbitが埋め込み対象になっているのか
x=x_StartPos;
y=y_StartPos;
//埋め込み開始
while(x<=x_EndPos){
if (Y_out[y][x]<Th){ //もし注目点が黒画素なら透かし埋め込み処理を行う
printf("found! x=%d bitnum=%d\n",x,bitnum);
if (sukasi[bitnum]==0){ // 「0」を埋め込むなら、該当画素を白くする
Y_out[y][x]=255;
}
bitnum++; //埋め込み対象を次のビットにする
}
if (bitnum==Length) // もし全てのビットの埋め込み処理が終了したら
break;
x++;
}
printf("埋め込みが完了しました.埋め込み終了x座標=%d\n",x);
}
void main(void)
{
int Length = 20; // 埋め込む透かしのビット長
int suuchi[]={1,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,0,0,1,0}; //埋め込む透かしビット
char *input="bar.bmp";
char *output="out.bmp";
/* 画像中のバーコードが書かれている左上端の座標 */
int x_StartPos;
int y_StartPos;
int x_EndPos;//バーコードx座標の終端
int Num_of_Blacks; //バーコードの横方向の黒画素数(=埋め込めるビット数の上限)
お礼
ありがとうございました. 助かりました.