幸运的是,我在研究了图像矩阵的细节后想出了一个解决方案。这是我得到的:我只是将每个灰度图像的所有灰度值相加,例如两个灰度图像,并将这个总和除以具有非零灰度值的像素数(因为透明背景被排除在匹配例程之外) . 这给出了图像中前景像素的平均灰度值。先决条件(我的研究需要)是图像必须具有相同的尺寸 r1 x c1 = r2 x c2 并且它们具有均匀透明的背景。
该循环将具有非 255(或者非零)灰度值的所有像素的所有像素灰度值相加,给出总前景亮度。r = 行,c = 列,I1 = 图像 1,I2 = 图像 2;当然,必须通过“imread”操作读取两张图像。
for i = 1:r
n = 1;
while n <= c
if I1(i,n,1)<255
B1 = [B1, I1(i,n,1)];
end
if I2(i,n,1)<255
B2 = [B2, I2(i,n,1)];
end
n=n+1;
end
end
TotBI1 = sum(B1);
TotBI2 = sum(B2);
在这里,计算两个图像的灰度值均非零(或非 255)的像素数(如上面循环中所选择的):
PixNr1 = length(B1);
PixNr2 = length(B2);
确定具有非零(或非 255)灰度值的每个像素的平均亮度(这也可以通过“平均”操作来完成):
BPixAvg1 = TotBI1/PixNr1;
BPixAvg2 = TotBI2/PixNr2;
最后,用DeltaB对所有非255灰度值的像素进行修改,即均衡(或折衷)灰度值;灰度值较暗的图像前景在 DeltaB 下变得更亮,而较亮的图像前景在 DeltaB 下变得更暗:
DeltaB = (BPixAvg1 - BPixAvg2)/2;
for i = 1:r
n=1;
while n<=c
if I1(i,n,1)<255
I1(i,n,1:3) = I1(i,n,1:3)-DeltaB;
end
if I2(i,n,1)<255
I2(i,n,1:3) = I2(i,n,1:3)+DeltaB;
end
n=n+1;
end
end
end
我将尝试概括各种图像的代码,因为一些使用 MATLAB PsychToolbox 进行一些视觉心理实验的人需要仔细控制客观参数,例如成对图像的亮度(例如用于双目竞争)。此外,尽管每个像素共享相同的平均灰度值,但一个图像前景中的较大对象可能比另一张图像的较小对象显得更暗(或更亮)。为此,我还将包括一些“间距”因素,它加权对象大小和它的表观亮度......