(MATLAB)如何获得一系列图像的最大和最小背景?

问题描述 投票:0回答:2

我在如何获得一系列图像背景的最大值和最小值时遇到了麻烦。我做了这个函数,它通过添加所有像素值计算平均值,然后除以总像素数:

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个图像)。获得平均值可以正常工作,但我无法解决如何最大化和最小化的问题。任何帮助将非常感激。

matlab image-processing max min
2个回答
0
投票

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

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
        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

这就是我用你的代码做的方法。

© www.soinside.com 2019 - 2024. All rights reserved.