我正在研究應用程序的一部分,我現在需要將兩個圖像比較在一起,並檢查它們與另一個圖像的相似程度。目前通過將兩個圖像轉換爲二進制數來計算黑色和白色像素的數量,然後最終將白色像素的數量除以圖像內存在的像素總數。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