Как исправить ошибку «Функция или переменная не определена», когда переменная определена и используется ранее в Matlab? - PullRequest
0 голосов
/ 20 июня 2019

Код должен просматривать определенную папку для любых подпапок. Затем в каждой подпапке предполагается искать каждое изображение и усреднять их все вместе. Затем это усредненное изображение сохраняется в отдельной папке и повторяется для всех оставшихся подпапок.

Вы можете напрямую протестировать этот код, скопировав и вставив в собственную программу MatLab и изменив заданные каталоги, нет никаких зависимостей.

Моя проблема: переменная sumImage перехватывает ошибку в самом конце цикла for.

finImage = uint8(sumImage / numberOfImages);

Несмотря на то, что sumImage часто использовался в предыдущем коде без ошибок.

Я предположил, что это была загвоздка с циклами for внутри друг друга, однако, когда я впервые запустил программу, она работала в основном безупречно. Однако дальнейшие попытки запустить код привели к ошибке компилятора. Я попытался изменить имя переменной и даже объявить его как двойное в начале, но безрезультатно.

folder1 = dir('C:\Users\slenka\Desktop\Image_Analysis\Original');
numberOfFolders = length(folder1);

for z = 1 : numberOfFolders
    currD = folder1(z).name;
    cd(currD);
    imageFiles = [dir(fullfile(currD,'*.TIF'));         dir(fullfile(currD,'*.PNG')); dir(fullfile(currD,'*.BMP'));     dir(fullfile(currD,'*.jpg'))];
    numberOfImages = length(imageFiles);

    for k = 1 : numberOfImages
    fullFileName = fullfile(currD, imageFiles(k).name);
    fprintf('About to read %s\n', fullFileName);
    thisImage=imread(fullFileName);
    [thisRows, thisColumns, thisNumberOfColorChannels] = size(thisImage);
    if k == 1
        % Save the first image.
        sumImage = double(thisImage);
        % Save its dimensions so we can match later images' sizes to this first one.
        rows1 = thisRows;
        columns1 = thisColumns;
        numberOfColorChannels1 = thisNumberOfColorChannels;
        theyreColorImages = numberOfColorChannels1 >= 3;
    else
        % It's the second, or later, image.
        if rows1 ~= thisRows || columns1 ~= thisColumns
            % It's not the same size, so resize it to the size of the first image.
            thisImage = imresize(thisImage, [rows1, columns1]);
        end
        % Make sure the colors match - either all color or all gray scale, according to the first one.
        if thisNumberOfColorChannels == 3 && numberOfColorChannels1 == 1
            % We have color.  Need to change it to grayscale to match the first one.
            thisImage = rgb2gray(thisImage);
            theyreColorImages = false;
        elseif thisNumberOfColorChannels == 1 && numberOfColorChannels1 == 3
            % We have grayscale.  Need to change it to RGB to match the first one.
            thisImage = cat(3, thisImage, thisImage, thisImage);
            theyreColorImages = true;
        end
        % Now do the summation.
        sumImage = sumImage + double(thisImage); % Be sure to cast to double to prevent clipping.   [rows, columns, numberOfColorBands]=size(thisImage);

        % It can't display an RGB image if it's floating point and more than 255.
        % So divide it by the number of images to get it into the 0-255 range.
        if theyreColorImages
            displayedImage = uint8(sumImage / k);
        else
            displayedImage = sumImage;
        end
        imshow(displayedImage, []);
        drawnow;
    end
    end


%--------------------------------------------------------------------------------
% Compute and display the final image:
finImage = uint8(sumImage / numberOfImages);
baseFileName = sprintf('Image #%d.png', z);
fullFileName =     fullfile('C:\Users\slenka\Desktop\Image_Analysis\Averaged', baseFileName);
imwrite(finImage, fullFileName);
    end

Ожидаемые результаты: выходная папка с усредненным изображением для каждой папки (всего 10 папок), к которой обращается программа

Фактические результаты: ошибка компилятора и два искаженных изображения в выходной папке

Редактировать: я получил его из-за комментариев, однако теперь, когда он работает, он усредняет все изображения на моем рабочем столе. Есть идеи? Я только хочу усреднить изображения в определенной папке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...