機械学習コースのトレーニング セットを用意する必要があります。このトレーニング セットでは、特定の顔画像について、頭の側面 ( Straight 、 Left 、 Right 、 Up ) を表す答えが得られます。
この目的のために、Java で .pgm 画像ファイルを読み取り、そのピクセルを行列 X の 1 行に格納してから、この画像の適切な正解を y ベクトルに格納する必要があります。最後に、これら 2 つの配列を .mat ファイルに保存します。
問題は、(P2 .pgm) 画像からピクセル値を読み取って console に出力しようとすると、matlab マトリックス ビューアーと同じ値が得られないことです。何が問題になるでしょうか?
これは私のコードです:
try{
InputStream f = Main.class.getResourceAsStream("an2i_left_angry_open.pgm");
BufferedReader d = new BufferedReader(new InputStreamReader(f));
String magic = d.readLine(); // first line contains P2 or P5
String line = d.readLine(); // second line contains height and width
while (line.startsWith("#")) { // ignoring comment lines
line = d.readLine();
}
Scanner s = new Scanner(line);
int width = s.nextInt();
int height = s.nextInt();
line = d.readLine();// third line contains maxVal
s = new Scanner(line);
int maxVal = s.nextInt();
for(int i=0;i<30;i++) /* printing first 30 values from the image including spaces*/
System.out.println((byte)d.read());
} catch (EOFException eof) {
eof.printStackTrace(System.out) ;
}
これらは私が得る値です: 50 49 32 50 32 49 32 48 32 50 32 49 56 32 53 57
この写真は、実際に MATLAB Viewer からの画像に含まれているものです: (申し訳ありませんが、評判が悪いため画像を投稿できません)
これは、notepad++ で .pgm ファイルを開くと表示されるものです。