画像の平均化フィルタによる平滑化処理
bmp画像を変換させるプログラムの課題を行っているものです。出力の画素数を4角、上端、下端、左端、右端、その他で分けて、入力の画素数を変換させて代入させています。フィルタ処理できない部分は0にします。ubuntuのgccでコンパイルしたところ、真っ黒な画像になりました。入力はあのLENNAさんの画像です。課題内容が入力の変換のみコードを書き換えるので、画像の読み取りや出力は問題ないです。
該当のソースコード
C言語です。入力はfloat** inputimageR,G,Bで出力はfloat** outimageR,G,Bです。それぞれ[ny][nx]です。
//左上、左下、右上、右下 outimageR[0][0]=1/9*(inputimageR[0][0]+inputimageR[0][1]+inputimageR[1][1]+inputimageR[1][0]); outimageG[0][0]=1/9*(inputimageG[0][0]+inputimageG[0][1]+inputimageG[1][1]+inputimageG[1][0]); outimageB[0][0]=1/9*(inputimageB[0][0]+inputimageB[0][1]+inputimageB[1][1]+inputimageB[1][0]); outimageR[0][nx-1]=1/9*(inputimageR[0][nx-2]+inputimageR[1][nx-1]+inputimageR[1][nx-2]+inputimageR[0][nx-1]); outimageG[0][nx-1]=1/9*(inputimageG[0][nx-2]+inputimageG[1][nx-1]+inputimageG[1][nx-2]+inputimageG[0][nx-1]); outimageB[0][nx-1]=1/9*(inputimageB[0][nx-2]+inputimageB[1][nx-1]+inputimageB[1][nx-2]+inputimageB[0][nx-1]); outimageR[ny-1][0]=1/9*(inputimageR[ny-1][0]+inputimageR[ny-1][1]+inputimageR[ny-2][0]+inputimageR[ny-2][1]); outimageG[ny-1][0]=1/9*(inputimageG[ny-1][0]+inputimageG[ny-1][1]+inputimageG[ny-2][0]+inputimageG[ny-2][1]); outimageB[ny-1][0]=1/9*(inputimageB[ny-1][0]+inputimageB[ny-1][1]+inputimageB[ny-2][0]+inputimageB[ny-2][1]); outimageR[ny-1][nx-1]=1/9*(inputimageR[ny-1][nx-1]+inputimageR[ny-1][nx-2]+inputimageR[ny-2][nx-2]+inputimageR[ny-2][nx-1]); outimageG[ny-1][nx-1]=1/9*(inputimageG[ny-1][nx-1]+inputimageG[ny-1][nx-2]+inputimageG[ny-2][nx-2]+inputimageG[ny-2][nx-1]); outimageB[ny-1][nx-1]=1/9*(inputimageB[ny-1][nx-1]+inputimageB[ny-1][nx-2]+inputimageB[ny-2][nx-2]+inputimageB[ny-2][nx-1]); //上端 for(i=0,j=1;j<nx-1;j++){ outimageR[i][j]=1/9*(inputimageR[i][j]+inputimageR[i][j-1]+inputimageR[i][j+1]+inputimageR[i+1][j-1]+inputimageR[i+1][j]+inputimageR[i+1][j+1]); outimageG[i][j]=1/9*(inputimageG[i][j]+inputimageG[i][j-1]+inputimageG[i][j+1]+inputimageG[i+1][j-1]+inputimageG[i+1][j]+inputimageG[i+1][j+1]); outimageB[i][j]=1/9*(inputimageB[i][j]+inputimageB[i][j-1]+inputimageB[i][j+1]+inputimageB[i+1][j-1]+outimageB[i+1][j]+inputimageB[i+1][j+1]); } //下端 for(i=ny-1,j=1;j<nx-1;j++){ outimageR[i][j]=1/9*(inputimageR[i][j]+inputimageR[i][j-1]+inputimageR[i][j+1]+inputimageR[i-1][j-1]+inputimageR[i-1][j]+inputimageR[i-1][j+1]); outimageG[i][j]=1/9*(inputimageG[i][j]+inputimageG[i][j-1]+inputimageG[i][j+1]+inputimageG[i-1][j-1]+inputimageG[i-1][j]+inputimageG[i-1][j+1]); outimageB[i][j]=1/9*(inputimageB[i][j]+inputimageB[i][j-1]+inputimageB[i][j+1]+inputimageB[i-1][j-1]+inputimageB[i-1][j]+inputimageB[i-1][j+1]); } //左端 for(i=1,j=0;i<ny-1;i++){ outimageR[i][j]=1/9*(inputimageR[i][j]+inputimageR[i+1][j]+inputimageR[i-1][j]+inputimageR[i-1][j+1]+inputimageR[i][j+1]+inputimageR[i+1][j+1]); outimageG[i][j]=1/9*(inputimageG[i][j]+inputimageG[i+1][j]+inputimageG[i-1][j]+inputimageG[i-1][j+1]+inputimageG[i][j+1]+inputimageG[i+1][j+1]); outimageB[i][j]=1/9*(inputimageB[i][j]+inputimageB[i+1][j]+inputimageB[i-1][j]+inputimageB[i-1][j+1]+inputimageB[i][j+1]+inputimageB[i+1][j+1]); } //右端 for(i=1,j=nx-1;i<ny-1;i++){ outimageR[i][j]=1/9*(inputimageR[i][j]+inputimageR[i+1][j]+inputimageR[i-1][j]+inputimageR[i-1][j-1]+inputimageR[i][j-1]+inputimageR[i+1][j-1]); outimageG[i][j]=1/9*(inputimageG[i][j]+inputimageG[i+1][j]+inputimageG[i-1][j]+inputimageG[i-1][j-1]+inputimageG[i][j-1]+inputimageR[i+1][j-1]); outimageB[i][j]=1/9*(inputimageB[i][j]+inputimageB[i+1][j]+inputimageB[i-1][j]+inputimageB[i-1][j-1]+inputimageB[i][j-1]+inputimageR[i+1][j-1]); } //others for (i = 1; i < ny-1; i++) { for (j = 1; j < nx-1; j++) { outimageR[i][j]=1/9*(inputimageR[i-1][j-1]+inputimageR[i][j-1]+inputimageR[i+1][j-1]+inputimageR[i-1][j]+inputimageR[i][j]+inputimageR[i+1][j]+inputimageR[i-1][j+1]+inputimageR[i][j+1]+inputimageR[i+1][j+1]); outimageG[i][j]=1/9*(inputimageG[i-1][j-1]+inputimageG[i][j-1]+inputimageG[i+1][j-1]+inputimageG[i-1][j]+inputimageG[i][j]+inputimageG[i+1][j]+inputimageG[i-1][j+1]+inputimageG[i][j+1]+inputimageG[i+1][j+1]); outimageB[i][j]=1/9*(inputimageB[i-1][j-1]+inputimageB[i][j-1]+inputimageB[i+1][j-1]+inputimageB[i-1][j]+inputimageB[i][j]+inputimageB[i+1][j]+inputimageB[i-1][j+1]+inputimageB[i][j+1]+inputimageB[i+1][j+1]); } }
試したこと
別のbmp画像でもやってみましたが、真っ黒でした。
回答2件
あなたの回答
tips
プレビュー