我在如何获得一系列图像背景的最大值和最小值时遇到了麻烦。我做了这个函数,它通过添加所有像素值计算平均值,然后除以总像素数:
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个图像)。获得平均值可以正常工作,但我无法解决如何最大化和最小化的问题。任何帮助将非常感激。
您可以使用以下代码来获取最小和最大背景。这里我所做的是,分别取每个图像的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
快速尝试回答您的图像处理问题。关于你在寻找什么的事情。图像堆栈中的最大值应该是整个堆栈中的最大值。最小值是堆栈中的最小值。因此,通过比较寻找最小或最大的图片来加载图片时,应生成最终要查找的图片。
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
这就是我用你的代码做的方法。