MatLab - 根据相关性创建图像数组

时间:2017-02-01 15:08:28

标签: arrays matlab

我为一个项目创建了一个程序,该程序可以相互测试图像以查看它是否是相同的图像。我已经决定使用相关性,因为我使用的图像是以相同的方式设置的,因此,我已经能够使所有事情都能正常运行。

我现在想再次创建一个图像数组,但这一次,按照它们的相关性顺序。因此,例如,如果我测试一个50便士的硬币并且我对50便士硬币测试50个图像,我希望将最高的5个相关性存储到一个数组中,然后可以将其用于以后的使用。但我不确定如何做到这一点,因为数组中的每个项目都需要有多个变量,这将是图像的图像位置/名称及其相关百分比。

%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

1 个答案:

答案 0 :(得分:0)

您可以使用struct()功能创建结构。

初始化struct的数组:

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

设置字段值:

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

提取correlation字段的值并选择5个最高相关性:

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

selectedData = imData(sortedInd(1:5));
相关问题