(MATLAB) Как получить максимальный и минимальный фон для серии изображений? - PullRequest
0 голосов
/ 18 марта 2019

У меня проблемы с тем, как получить максимум и минимум фона серии изображений.Я сделал эту функцию, которая вычисляет среднее значение, добавляя все значения пикселей, а затем делит их на общее количество пикселей:

function [Ifondo] = promedioImgs(pathImages)
fn = sprintf('%s*.jpeg',pathImages);
indexImages = dir(fn);
numImages=length(indexImages);

Ifondo=0;
for i=1:numImages
    fn = sprintf('%s%s',pathImages,indexImages(i).name);
    primera=imread(fn);
    primera=double(primera);
    if(i==1)
        Ifondo=double(primera);
    else
        Ifondo=Ifondo+primera;
    end
end

Ifondo=uint8(round(Ifondo/numImages));
end

В этой функции Ifondo - фоновое изображение, которое я хочу получить (папка содержит 100изображений) .Получение среднего значения работает нормально, но я не могу обойтись, как сделать это за макс и мин.Любая помощь могла бы быть полезна.

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Быстрая попытка ответить на ваш вопрос по обработке изображений.Обратите внимание на то, что вы ищете.Максимум в стеке изображений должен быть наибольшим значением во всем стеке.Минимум - это самые маленькие значения в стеке.Таким образом, при выполнении сравнения, ищущего наименьшее или наибольшее при загрузке изображений, вы должны получить изображение, которое вы ищете, к концу.

for i=1:numImages
    fn = sprintf('%s%s',pathImages,indexImages(i).name);
    primera=imread(fn);
    primera=double(primera);
    if(i==1)
        Ifondo=double(primera);
    else
        IDX = Ifondo < primera; % Finding larger values from next loaded img
        Ifondo(IDX) = primera(IDX); % pixels found larger in primera, overlap those same pixels in Ifondo
    end
end

Так я бы сделал это, используя ваш код.

0 голосов
/ 18 марта 2019

Вы можете использовать код ниже, чтобы получить минимальный и максимальный фон.Вот что я сделал, взяв значения r, g, b каждого изображения по отдельности, затем получил их минимальное и максимальное значения, а затем объединил их для создания максимального и минимального фона.

Надеюсь, это поможет:)

Хорошего дня.

Спасибо

function [mean_Ifondo,max_Ifondo,min_Ifondo] = promedioImgs(pathImages)

fn = sprintf('%s*.jpg',pathImages);
indexImages = dir(fn);
numImages=length(indexImages);
fn = sprintf('%s%s',pathImages,indexImages(1).name);
primera=imread(fn);


sz = size(primera);
ar = zeros(numImages,sz(1),sz(2),sz(3));
r = zeros(numImages,sz(1),sz(2));
g = zeros(numImages,sz(1),sz(2));
b = zeros(numImages,sz(1),sz(2));


Ifondo=0;
for i=1:numImages
    fn = sprintf('%s%s',pathImages,indexImages(i).name);
    primera=imread(fn);
    primera=double(primera);

    ar(i,:,:,:) = primera;

    r(i,:,:) = ar(i,:,:,1);
    g(i,:,:) = ar(i,:,:,2);
    b(i,:,:) = ar(i,:,:,3);

    if(i==1)
        Ifondo=double(primera);
    else
        Ifondo=Ifondo+primera;
    end
end

mean_Ifondo= uint8(round(Ifondo/numImages));

for i = 1:sz(1)
    for j = 1:sz(2)
      max_r(i,j) = max(r(:,i,j));
      max_g(i,j) = max(g(:,i,j));
      max_b(i,j) = max(b(:,i,j));

      min_r(i,j) = min(r(:,i,j));
      min_g(i,j) = min(g(:,i,j));
      min_b(i,j) = min(b(:,i,j));     

    end
end

max_Ifondo(:,:,1) = max_r;
max_Ifondo(:,:,2) = max_g;
max_Ifondo(:,:,3) = max_b;
min_Ifondo(:,:,1) = min_r;
min_Ifondo(:,:,2) = min_g;
min_Ifondo(:,:,3) = min_b;

end
...