画像処理プログラム③プリュウィットフィルタ

今日はプリュウィットフィルタ処理ということでプログラムを作成していきたいと思います。

この処理は画像の明暗の差が大きいところを示し、ホログラフィックのような画像へと加工いたします。

画像1

この画像を縦横のプリュウィットフィルタで加工するコーディングを行います。

#include <stdio.h>
#include <math.h>
#define SIZE 256
int main(void){ 
int i, j;
int sumA, sumB, sumC;
double ave;
	unsigned char img[SIZE][SIZE]; //入力画像を保持するための配列
	unsigned char img2[SIZE][SIZE]; //出力画像を保持するための配列

FILE *fp;
fp = fopen("poppo.raw", "rb"); //入力画像ファイルのオープン
fread(img, 1, SIZE*SIZE, fp); //画像データの読み込み
fclose(fp); //画像ファイルのクローズ

/* 縦横のプリュウィットフィルタを用いた後その2乗の和の平方根を算出して絶対値を出力 */

for(i=1; i< SIZE-1; i++){
    for(j=1; j< SIZE-1; j++){
	sumA = (img[i-1][j-1]+img[i][j-1]+img[i+1][j-1]-img[i-1][j+1]-img[i][j+1]-img[i+1][j+1]);
	sumB = (img[i+1][j-1]+img[i+1][j]+img[i+1][j+1]-img[i-1][j-1]-img[i-1][j]-img[i-1][j+1]);

	/* 縦横のプリュウィットフィルタの適用 */

	img2[i][j] = sqrt(sumA*sumA+sumB*sumB);		//その2乗の和を算出

	if(img2[i][j] > 255){
               img2[i][j] = 255;			//255以上の時は255
           } else if(img2[i][j] < 0){
               img2[i][j] = -img2[i][j];		//0以下の時は絶対値
		}
	}
  }

fp = fopen("poppo2.raw", "wb"); //画像出力ファイルのオープン
fwrite(img2, 1, SIZE*SIZE, fp); //画像データの書き込み
fclose(fp); //画像ファイルのクローズ
return 0;
}

このプログラムにより加工を行うと、次のような画像になります。

プリューウィットフィルタ

このような感じになりました。

画像処理シリーズは今回で終わりになるかと思います。

次回からおそらく数的処理のプログラムに入っていくかもしれません。

この記事が気に入ったらサポートをしてみませんか?