2

matlabを使用したパターン(男性/女性)分類に関するプロジェクトに取り組んでいます。問題があります。助けが必要です。

私のプログラムは、データセットの平均画像を見つける必要があります。最初のデータセットは女性、2番目のデータセットは男性です。したがって、最初の平均画像は女性のように見え、次に男性のように見える必要があります。私はさまざまなデータセットを持っており、それらはすべてjpeg形式です。プログラムが機能しているかどうかを確認するために、プログラムにさまざまなデータセットを試していますが、さまざまなデータセットを使用すると、真の平均画像を常に表示できません。例:

これらは、データセットからの平均画像です。

ここに画像の説明を入力してください

しかし、別のデータセットを使用する場合、私の平均画像は次のようになります。意味はありません。つまり、顔のようには見えません。

ここに画像の説明を入力してください

これの理由は何でしょうか?別のデータセットで作業する必要があります。助けてください。`

filenamesA = dir(fullfile(pathfora, '*.jpg'));
Train_NumberA = numel(filenamesA);

%%%%%%%%%%%%%%%%%%%% Finding Image Vectors for A

imagesA= [];
for k = 1 : Train_NumberA

    str = int2str(k);

    str= strcat(str);

    str = strcat('\',str,'b','.jpg');
    str = strcat(pathfora,str);

    imgA = imread(str);
    imgA = rgb2gray(imgA);
    [irowA icolA] = size(imgA);
    tempA = reshape(imgA',irowA*icolA,1);   % Reshaping 2D images into 1D image vectors
    imagesA = [imagesA tempA]; % 'imagesA' grows after each turn 

    imagesA=double(imagesA);
end`


`%%%%%%%%%%%%%%%%%%%%%%%% Calculate the MEAN IMAGE VECTOR for A

mean_vectorA= mean(imagesA,2); % Computing the average vector m = (1/P)*sum(Tj's)    (j = 1 : P)
mean_imageA= reshape(mean_vectorA,irowA,icolA);   % Average matrix of training set A
meanimgA=mat2gray(mean_imageA);
figure(1);
imshow(rot90(meanimgA,3));`



-------------------------------------And same for dataset B (male)
4

2 に答える 2

1

2D画像をマトリックスの単一行に再形成する代わりに、画像の3D配列またはセル配列を使用します。再形成は不要であり、バグを追加することしかできません。

すべての画像が同じサイズの場合は、多次元配列を使用できます。多次元配列に関するMatlabのドキュメント

それ以外の場合は、セル配列を使用します。セル配列に関するMatlabのドキュメント

于 2012-05-14T16:51:25.133 に答える
1

3Dマトリックスを使用して画像を保存できます。また、コードを少しクリーンアップしました。未検証。

filenamesA = dir(fullfile(pathfora, '*.jpg'));
Train_NumberA = numel(filenamesA);

imagesA = [];

for k = 1:Train_NumberA
    imgA = imread(strcat(pathfora, '\', int2str(k), 'b', '.jpg'));
    imgA = rgb2gray(imgA);

    imagesA = cat(3, imagesA, imgA);
end

doubleコマンドがループから外れました。

imagesA = double(imagesA);

imagesA行列の3次元の平均を計算して、平均2D画像を取得します。

meanimage_A = mean(imagesA, 3);

グレースケール画像に変換します。

meanimgA = mat2gray(meanimage_A);

ここでは必要ないと思いrot90ます...

figure(1);
imshow(meanimgA, 3);
于 2012-05-14T17:21:16.387 に答える