我实现了一种基于文章Entropy Minimization for Shadow Removal中找到的不变颜色特征去除阴影的方法。我的实现似乎有时会产生类似的计算结果,但它们总是关闭,我的灰度图像是块状的,可能是因为错误地采用了几何平均值。
以下是纸张中马图像的信息潜力以及我的不变图像的示例图。将x轴乘以3得到theta(从0到180):
这是灰度图像我的代码输出正确的最大theta(我的关闭10):
你可以看到他们的图像没有的阻塞:
这是他们的潜在信息:
当除以几何平均值时,我尝试使用NaN并对图像进行阈值处理,因此最小可能值为.01,但它似乎不会改变我的输出。
这是我的代码:
I = im2double(imread(strname));
[m,n,d] = size(I);
I = max(I, .01);
chrom = zeros(m, n, 3, 'double');
for i = 1:m
for j = 1:n
% if ((I(i,j,1)*I(i,j,2)*I(i,j,3))~= 0)
chrom(i,j, 1) = I(i,j,1)/((I(i,j,1)*I(i,j,2)*I(i,j, 3))^(1/3));
chrom(i,j, 2) = I(i,j,2)/((I(i,j,1)*I(i,j,2)*I(i,j, 3))^(1/3));
chrom(i,j, 3) = I(i,j,3)/((I(i,j,1)*I(i,j,2)*I(i,j, 3))^(1/3));
% else
% chrom(i,j, 1) = 1;
% chrom(i,j, 2) = 1;
% chrom(i,j, 3) = 1;
% end
end
end
p1 = mat2gray(log(chrom(:,:,1)));
p2 = mat2gray(log(chrom(:,:,2)));
p3 = mat2gray(log(chrom(:,:,3)));
X1 = mat2gray(p1*1/(sqrt(2)) - p2*1/(sqrt(2)));
X2 = mat2gray(p1*1/(sqrt(6)) + p2*1/(sqrt(6)) - p3*2/(sqrt(6)));
maxinf = 0;
maxtheta = 0;
data2 = zeros(1, 61);
for theta = 0:3:180
M = X1*cos(theta*pi/180) - X2*sin(theta*pi/180);
s = sqrt(std2(X1)^(2)*cos(theta*pi/180) + std2(X2)^(2)*sin(theta*pi/180));
s = abs(1.06*s*((m*n)^(-1/5)));
[m, n] = size(M);
length = m*n;
sources = zeros(1, length, 'double');
count = 1;
for x=1:m
for y = 1:n
sources(1, count) = M(x , y);
count = count + 1;
end
end
weights = ones(1, length);
sigma = 2*s;
[xc , Ak] = fgt_model(sources , weights , sigma , 10, sqrt(length) , 6 );
sum1 = sum(fgt_predict(sources , xc , Ak , sigma , 10 ));
sum1 = sum1/sqrt(2*pi*2*s*s);
data2(theta/3 + 1) = sum1;
if (sum1 > maxinf)
maxinf = sum1;
maxtheta = theta;
end
end
InvariantImage2 = cos(maxtheta*pi/180)*X1 + sin(maxtheta*pi/180)*X2;
假设快速高斯变换是正确的。
答案 0 :(得分:2)
我不知道这是否会产生任何影响,因为现在已经超过一个月,但是块状和不同的信息潜力图只是由于使用过的图像的压缩造成的。您不能指望使用此图像获得相同的结果,因为他们使用了原始的高分辨率未压缩版本。我不得不说我对你的结果印象深刻,特别是在实施信息潜力方面。那件事让我头晕目眩。
约翰。