使用Matlab

时间:2018-04-10 18:12:20

标签: matlab background

我有一个图像列表,我希望只在x轴上有不均匀的照明。背景估计/模型将被预先计算,但只会给出它的形状(因此我不会有一个我可以减去的空背景图像),我将只有它的形状/形状(例如线性)。

有没有办法减去背景,只需知道它的形状(并没有实际的背景图像)就能获得均匀的图像照明?我附加了使用线性背景(background = -3 * x + 0.5)创建的Matlab库中的图像。有人可以告诉我如何使用背景形状从这个例子到原始图像吗?

enter image description here

我还包括原始图片。 enter image description here

1 个答案:

答案 0 :(得分:2)

如果您有形状,并且您声明的条件正确,那么您将获得完整的背景信息。但是,无法撤消发生的剪辑(图像的值为255,您不知道原始值是什么)。

这是在给定形状的情况下创建背景图像的方法:

img = imread('https://i.stack.imgur.com/0j2Gi.jpg');
img = img(27:284,91:370); % OP posted a screen shot? What is this margin?

x = 0:size(img,2)-1;
background = 0.3*x+0.5;
background = repmat(background,size(img,1),1);

imshow(img-background)

结果看起来与原始图像不完全相同,但大多数结果可以通过剪裁来解释。

我将-3*x+0.5替换为0.3*x+0.5,因为-3没有意义,0.3使得背景值保持在有意义的范围内。

另一方面,如果您要求拟合线性模型到图像数据并估计要减去的确切背景,那么问题就更难了,但并非不可能。例如,如果照片在整个图像上均匀,则可以对x轴上的强度均匀性做出假设。然后,您可以沿x轴取平均强度并使模型适合它:

meanintensity = mean(img,1)';
plot(m)

X = [ones(length(meanintensity),1),(0:length(meanintensity)-1)']; % meanintensity = X*params    
params = X\meanintensity;
hold on, plot(X*params)

background = X*params;
background = repmat(background',size(img,1),1);
imshow(img-background)