在matlab中找到图像的逆对数变换

时间:2011-10-15 23:40:11

标签: matlab image-processing transformation imagefilter

我几乎整天都在寻找这个。日志转换的一般形式是

s = clog(1+r) 

,其中

c = 0.1 

相反的是逆对数变换(书)。逆对数变换是什么?是吗

s = exp(r)

无法获得正确的输出。

5 个答案:

答案 0 :(得分:5)

如果Exp()natural logarithm,则

Log()只会与Log()相反。如果您的Log()使用不同的基数(基数2,基数10,任何其他任意基数),那么您需要在e中使用不同的基数来代替Exp()。< / p>

<强>更新

试试10^(x/0.1)-1x/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的转换输出:

enter image description here

要将此转换应用于图像,我们需要进行一些类型转换:

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)');

enter image description here

答案 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()