- ベストアンサー
画像処理について・・・・・・・・・・・
#include<stdio.h> #include<stdlib.h> #define X_SIZE 512 #define Y_SIZE 512 unsigned char DATA[Y_SIZE][X_SIZE]; unsigned char O_DATA[Y_SIZE][X_SIZE]; char input_file_name[256]=”Lenna.raw”; char output_file_name[256]=”Lenna_out.raw”; void heikin(){ int x,u; int temp; for(y=1;y<Y_SIZE-1;y++){ for(x=1;x<X_SIZE-1;x++){ temp=・・・・・・・・・・・・・・・・・・・・・・・・; O_DATA[x][y]=(unsigned char)temp; } } } Int main (){ FILE*fp; If((fp=fopen(input_file_name,”rb”))==NULL){ Printf(“ファイルオ-プンエラ-\n”); Return 1; } Fread(DATA,sizeof(DATA),1,fp); fclose(fp); heikin(); if((fp=fopen(output_file_name,”wb”))==NULL{ printf(“ファイルオ-プンエラ-\n”); return 1; } Fwrite(O_DATA,sizeof(O_DATA),1,fp); Fclose(fp); Return 0; } ソースコードをやっているのですが、後、・・・・・・・・・の所を入力して完成なんですが、苦戦してます。 処理の内容としましては、 1、入力画像Lenna.rawを読み込んで、 2、平均値フィルタをかけ、 3、Lenna_out.rawに書き出す(保存する)したいんですが、公式みたいなのを入れればいいのでしょうか? すみませんが、お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
平均値フィルタを完成させても、このプログラムは動かない。 http://ja.wikipedia.org/wiki/RAW%E7%94%BB%E5%83%8F を良く読もう。 ---- RAW画像のデータフォーマットは各メーカー・各機種によって違うため、現像には対応ソフトウェアを用意する必要がある。通常はカメラメーカーが自社製の現像ソフトウェアを添付しているほか、アドビシステムズ等のサードパーティからは数多くの機種に対応した現像ソフトウェアが発売されている。 ---- と書いてある。 つまり >1、入力画像Lenna.rawを読み込んで、 の部分で「頭からベタ読み」しても「データは正しく読めない」のだ。 この部分で「現像」をしなければならない。「現像処理」をして、はじめて「512×512のサイズの画像データ」になる。 で「512×512のサイズの画像データ」に対し「平均値フィルタ」をかける。 かけ終わったら「RAWファイルフォーマットでファイルに落とす必要」がある。つまり「現像の逆」をしなきゃならない。 因みに「現像」とは、RAWファイルのヘッダに記録された設定値を元に、CCDセンサー値の補間、ホワイトバランスの実行、色彩と飽和、光度値を修正、鋭角性を修正(レンズ歪みの補正)、露出調整を行い、8ビット色に変換する事を言う。 なお「RAWファイルのヘッダに記録された設定値」は、デジカメの撮影モードの各種設定値の事。なので、RAWファイルの種類は、各メーカーの機種の数だけあると言っても過言ではない。 最初に、この「現像」が出来なきゃ、お話にならない。その為には「ヘッダの解析」と「データ部の展開」が出来なきゃならない。 もちろん「逆現像」も必要。じゃないと「出力をRAWに出来ない」から。 平均値フィルタの事は置いといて、まず 1.ファイルヘッダを読み込む 2.ヘッダ情報に基いてデータ部を読み込んで展開、現像 3.現像した画像を画面に表示してみる 4.フィルタ等の加工処理は何もしないで、逆現像してみる 5.逆現像したデータを、ヘッダ情報を付けてRAWファイルに書き出す 6.他の「RAWファイルを読めるソフト」で「自分が書き出したRAWファイルを試し読み」させて、ちゃんと読めるて、元と同じ画像が現像されて出て来るかテストする と言う所まで頑張りましょう。 「平均値フィルタを作る」のは、これが終ったあと。 これがマトモに動いたら、その次は、上記「3」の「画面に表示してみる」の手前に「平均値フィルタをかける」のを足せば良い。 ぶっちゃけ「RAWファイルを読み書きするライブラリルーチン」をどっかで探して来て組み込まない限り「自作は無理」だと思う。
その他の回答 (1)
- sonata1229
- ベストアンサー率36% (76/206)
質問者様のC言語理解度がどの程度なのかわからないですし、 こういう質問に答えをそのまま掲載するのは、 質問者様にもプラスにならないと思うので、参考URLを見て 理解した上で(ここ重要) 自分なりにプログラムを組んでみてはどうでしょうか。 そこで分からない部分があれば質問すればよいかと。 http://www.naka-lab.sist.chukyo-u.ac.jp/ono/summarrep/sumrep.html http://www.shader.jp/xoops/html/masafumi/directx9/Monkey/rm011.htm