【问题标题】:(MATLAB) How to obtain the max and min background of a series of images?(MATLAB)如何获得一系列图像的最大和最小背景?
【发布时间】:2019-08-08 08:35:19
【问题描述】:

我在如何获取一系列图像的背景的最大值和最小值方面遇到了麻烦。我制作了这个函数,它通过将所有像素值相加然后除以像素总数来计算平均值:

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张图片)。获得平均值效果很好,但我无法解决如何为最大值和最小值做这件事。任何帮助将非常感激。

【问题讨论】:

  • 在这种情况下,max 和 min 是什么意思?
  • 您有多少 RAM 可用于图像处理?您是否在 RAM 使用方面受到限制,这就是您选择附加方法的原因?

标签: matlab image-processing max min


【解决方案1】:

您可以使用以下代码获取最小和最大背景。在这里我所做的是,分别获取每个图像的 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

【讨论】:

    【解决方案2】:

    快速尝试回答您的图像处理问题。关于您要查找的内容的注意事项。图像堆栈中的最大值应该是整个堆栈中的最大值。最小值是堆栈中的最小值。因此,通过在加载图片时进行比较寻找最小或最大的图片,最终应该会生成您正在寻找的图片。

    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
    

    这就是我使用您的代码的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 2011-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多