2017-02-01 6 views
0

Ich habe ein Programm für ein Projekt erstellt, das Bilder gegeneinander testet, um zu sehen, ob es das gleiche Bild ist oder nicht. Ich habe mich entschieden, die Korrelation zu verwenden, da die Bilder, die ich benutze, auf die gleiche Art und Weise gestaltet sind, und damit war ich in der Lage, alles bis zu diesem Punkt in Gang zu bringen.MatLab - Erstellen eines Arrays von Bildern abhängig von ihrer Korrelation

Ich möchte jetzt wieder eine Reihe von Bildern erstellen, aber diesmal in der Reihenfolge ihrer Korrelation. Wenn ich zum Beispiel eine 50-Pence-Münze teste und 50 Bilder gegen die 50-Pence-Münze teste, möchte ich, dass die höchsten 5 Korrelationen in einem Array gespeichert werden, das dann für die spätere Verwendung verwendet werden kann. Aber ich bin nicht sicher, wie dies zu tun ist, da jedes Element im Array mehr als eine Variable haben muss, die der Bildort/Name des Bildes und der Korrelationsprozentsatz ist.

%Program Created By Ben Parry, 2016. 

clc(); %Simply clears the console window 

%Targets the image the user picks 
inputImage = imgetfile(); 
%Targets all the images inside this directory 
referenceFolder = 'M:\Project\MatLab\Coin Image Processing\Saved_Images'; 
if ~isdir(referenceFolder) 
    errorMessage = print('Error: Folder does not exist!'); 
    uiwait(warndlg(errorMessage)); %Displays an error if the folder doesn't exist 
    return; 
end 

filePattern = fullfile(referenceFolder, '*.jpg'); 
jpgFiles = dir(filePattern); 
for i = 1:length(jpgFiles) 
    baseFileName = jpgFiles(i).name; 
    fullFileName = fullfile(referenceFolder, baseFileName); 
    fprintf(1, 'Reading %s\n', fullFileName); 
    imageArray = imread(fullFileName); 
    imshow(imageArray); 
    firstImage = imread(inputImage); %Reading the image 

    %Converting the images to Black & White 
    firstImageBW = im2bw(firstImage); 
    secondImageBW = im2bw(imageArray); 

    %Finding the correlation, then coverting it into a percentage 
    c = corr2(firstImageBW, secondImageBW); 
    corrValue = sprintf('%.0f%%',100*c); 

    %Custom messaging for the possible outcomes 
    corrMatch = sprintf('The images are the same (%s)',corrValue); 
    corrUnMatch = sprintf('The images are not the same (%s)',corrValue); 

    %Looping for the possible two outcomes 
    if c >=0.99 %Define a percentage for the correlation to reach 

     disp(' '); 
     disp('Images Tested:'); 
     disp(inputImage); 
     disp(fullFileName); 
     disp (corrMatch); 
     disp(' '); 
    else 

     disp(' '); 
     disp('Images Tested:'); 
     disp(inputImage); 
     disp(fullFileName); 
     disp(corrUnMatch); 
     disp(' '); 
    end; 

    imageArray = imread(fullFileName); 


    imshow(imageArray); 


end 

Antwort

0

Sie können struct() Funktion verwenden, um Strukturen zu erstellen.

ein Array von struct Initialisieren:

imStruct = struct('fileName', '', 'image', [], 'correlation', 0); 
imData = repmat(imStruct, length(jpgFiles), 1); 

Rahmen Feldwerte:

for i = 1:length(jpgFiles) 
    % ... 
    imData(i).fileName = fullFileName; 
    imData(i).image = imageArray; 
    imData(i).correlation = corrValue; 
end 

Auszugswerte von correlation Feld und wählen 5 höchsten Korrelationen:

corrList = [imData.correlation]; 
[~, sortedInd] = sort(corrList, 'descend'); 

selectedData = imData(sortedInd(1:5)); 
Verwandte Themen