幸いなことに、画像マトリックスの詳細を調べた後、解決策を思いつきました。これが私が得たものです:私はちょうど2つのグレースケール画像のそれぞれのすべてのグレースケール値を追加し、この合計をゼロ以外のグレースケール値を持つピクセルの数で割ります(透明な背景がマッチングルーチンから除外されているため) 。これにより、画像の前景のピクセルの平均グレースケール値が得られます。前提条件(私の研究に必要)は、画像が同じ寸法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);
ここでは、2つの画像の両方でゼロ以外(または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を使用して視覚的な心理物理学的実験を行う人の中には、ペアの画像のブライトなどの客観的なパラメーターを慎重に制御する必要があるため、あらゆる種類の画像のコードを一般化しようとします(両眼のライバル関係など)。さらに、ピクセルごとに同じ平均グレースケール値を共有しますが、一方の画像の前景にある大きなオブジェクトは、もう一方の画像の小さなオブジェクトよりも暗く(または明るく)見える可能性があります。このために、オブジェクトのサイズと見かけの明るさを重み付けする「間隔」係数も含めます...