2011-10-15 3 views
3

J'ai cherché cela presque toute la journée. La forme générale de la transformation logarithmique esttrouver une transformation de log inverse d'une image dans matlab

s = clog(1+r) 

c = 0.1 

L'inverse est une transformation inverse de journal (livre). Quelle sera la transformation log inverse? Est-ce

s = exp(r)?

Impossible d'obtenir la sortie correcte. L'aide est grandement appréciée. Merci.

Répondre

4

Exp() sera seulement un inverse de Log() si Log() est le natural logarithm. Si votre Log() utilise une base différente (base 2, base 10, toute autre base arbitraire), vous devrez utiliser la base différente à la place de e dans Exp().

Mise à jour

Essayez 10^(x/0.1)-1. x/0.1 annule l'opération 0.1 *, 10^ annule le log() et -1 annule le +1.

+0

en utilisant la base de 10 par défaut. – user461127

+0

+1 * Je pense que c'est plus lisible si vous utilisez '0.1' au lieu de' .1' * – Amro

+0

@Amro, je pense que vous avez raison. Merci. – sarnold

0

Vous pouvez utiliser la transformation de loi de puissance pour cela car en loi de puissance, vous pouvez déplacer la courbe pour effectuer une transformation log ou effectuer une transformation log inverse qui affecte les pixels de haut niveau. ce

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); 
+0

annuler à nouveau mes modifications de vos liens auto-promotionnels, non divulgués et non liés entraînera le traitement de vos messages comme spam. Juste un avis amical. –

1

Je pense que vous avez défini c pour normaliser l'image résultante à une plage (visible) valide. Ensuite, une valeur rationnelle pour c pourrait être:

c = (L - 1)/log(L) 

L est le nombre de niveaux de gris. Donc s serait:

s = log(r+1) .* ((L – 1)/log(L)) 

ou

s = log(r+1) .* c 

Puis la transformation inversée serait:

s2 = (exp(r) .^ (log(L)/(L-1))) – 1 

ou

s2 = (exp(r) .^ (1/c)) – 1 

C'est la sortie de transformation pour L=256:

enter image description here

Pour appliquer cette transformation à une image que nous devons faire quelques transtypage:

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