我几乎整天都在寻找这个。日志转换的一般形式是
s = clog(1+r)
,其中
c = 0.1
相反的是逆对数变换(书)。逆对数变换是什么?是吗
s = exp(r)
?
无法获得正确的输出。
答案 0 :(得分:5)
Exp()
是natural logarithm,则 Log()
只会与Log()
相反。如果您的Log()
使用不同的基数(基数2,基数10,任何其他任意基数),那么您需要在e
中使用不同的基数来代替Exp()
。< / p>
<强>更新强>
试试10^(x/0.1)-1
。 x/0.1
撤消0.1 *
操作,10^
撤消log()
,-1
撤消+1
。
答案 1 :(得分:2)
我认为你定义了c
来将结果图像标准化为有效(可见)范围。那么c
的合理值可能是:
c = (L - 1)/log(L)
其中L
是灰度级数。所以s
将是:
s = log(r+1) .* ((L – 1)/log(L))
或
s = log(r+1) .* c
然后倒置的转换将是:
s2 = (exp(r) .^ (log(L) / (L-1))) – 1
或
s2 = (exp(r) .^ (1/c)) – 1
这是L=256
的转换输出:
要将此转换应用于图像,我们需要进行一些类型转换:
figure;
L = 256;
I = imread('cameraman.tif');
log_I = uint8(log(double(I)+1) .* ((L - 1)/log(L)));
exp_I = uint8((exp(double(I)) .^ (log(L) / (L-1))) - 1);
subplot(2, 2, [1 2]); imshow(I); title('Input');
subplot(2, 2, 3); imshow(log_I); title('\itlog(I)');
subplot(2, 2, 4); imshow(exp_I); title('\itexp(I)');
答案 2 :(得分:0)
您可以使用幂律变换来执行此操作,因为在幂律变换中您可以移动曲线以执行对数变换或执行逆对数变换,这会影响高级像素但不会影响低级像素。您可以使用此
a=imread('Figure-3.tif');
a=im2double(a);
[r,c]=size(a);
gamma=0.6;
C=1;
for i=1:r
for j=1:c
s(i,j)=C*(a(i,j)^gamma);
end
end
imshow(s);
答案 3 :(得分:0)
这适用于逆对数转换
clc;
clear all;
close all;
a=imread('imagename.jpg');
ad=im2double(a);
x=ad;
[r,c]=size(ad);
factor=1;
for i=1:r
for j = 1:c
x(i,j)= exp(ad(i,j)^factor)-1;
end
end
subplot(1,2,1);imshow(ad);title('before');
subplot(1,2,2);imshow(x);title('after');
答案 4 :(得分:-1)
import cv2
import numpy as np
# Open the image.
img = cv2.imread('InverseLogTransform.jpg')
cv2.imshow('Input',img)
# Apply log transform.
c = 255 / (np.log(1 + np.max(img)))
ilog_transformed = np.(exp(img/c))-1
# Specify the data type.
ilog_transformed = np.array(ilog_transformed, dtype=np.uint8)
cv2.imshow('ILog',ilog_transformed)
cv2.waitKey(0)cv2.destroyAllWindows()