私は現在、2つの画像を比較して、それらがどれほど似ているかを確認する必要のあるアプリケーションの一部に取り組んでいます。これは、2つの画像を白黒ピクセル数を数えて2進数に変換し、最終的に白ピクセルの数を画像内に存在するピクセルの総数で除算することによって行われます。Matlab - 画像の背景を無視する
私が今直面している問題は、私が使用している画像の背景が「類似性スコア」に向かっており、不正確な結果になっているためです。私はこの問題をどのように解決するかについてのアイデアを持っていますが、私は実際にどのように実践するか分かりません。
たとえば、これがイメージファイルであり、ピクセル値であるとします。
0000000000
0000110000
0001001000
0011001100
0001001000
0000110000
0000000000
私の考えは、画像の背景に含まれる黒画素の数を検出するために、ダウンまで、最大下、右から左へ、左から右へそれぞれ行と列を検索することです。そして、うまくいったん白いピクセルを検出すると、その行/列の検索を停止し、次の行へ移動します。最後に、検索が完了すると、バックグラウンドがどれくらいの黒ピクセルを占めているかを知ることができます。その結果、私の総計からその価値を引き離すことができます。これにより、より正確な読みが可能になります。
このように検索する方法はわかりませんし、これらのオブジェクト(以下の例)にも含まれているため、画面上のすべての黒いピクセルを重要なので取り除きたくありません。誰かがこのようにする方法を知っているのですか、さらに簡単な方法を知っていますか?
現在のコード:
for i = 1:length(jpgFiles)
baseFileName = jpgFiles(i).name;
fullFileName = fullfile(referenceFolder, baseFileName);
%Reading in the images & converting the images to Black & White
a = im2bw(imread(firstImage));
b = im2bw(imread(fullFileName));
compiledImage = a==b;
fprintf(1, 'Reading %s\n', fullFileName);
axes(handles.axes4);
disp(compiledImage); %Displays the values if the pixels match
[X, Y] = find(a ~= b); %Find coordinates for which the two images are equal
imshow(a); %Show first image
hold on %Retains the current plot and certain axes properties
plot(Y, X, 'y.'); %Overlay those coordinates
hold off %Resets axes properties to their default before drawing new plots
%Getting the values of white and black pixels
blackCount = sum(sum(a==b ==0));
whiteCount = sum(sum(a==b));
disp('Black Count:');
disp(blackCount);
disp('White Count:');
disp(whiteCount);
%Calculating the percentage
maxTotal = blackCount + whiteCount;
decimalValue = whiteCount/maxTotal;
percentageValue = sprintf('%.0f%%',100*decimalValue);
disp(decimalValue);
disp(percentageValue);
%Title settings and delay, if needed
title('Strongest Features (Yellow Hides Any Discrepancies)', 'fontweight', 'bold'); %Sets the title
drawnow;
%pause(5);
%Adding into the image array
imageArray{j} = baseFileName;
j = j + 1;
%Adding into the popular features array
popFeaturesArray{i} = 100*decimalValue;
i = i + 1;
end
画像例:
は(問題ランニングbwareafiltを手に入れた)、私は私の大学は、Matlabのバージョンを持っているとは思いませんこのコマンドが含まれている私は恐れている – iBenParry
私は私の答えで 'bwareafilt'の代替を追加 – user2999345