найти обратное лог-преобразование изображения в Matlab - PullRequest
4 голосов
/ 16 октября 2011

Я искал это почти весь день.Общая форма преобразования журнала -

s = clog(1+r) 

, где

c = 0.1 

Обратное преобразование журнала (книга).Каким будет обратное преобразование журнала?Это

s = exp(r)?

Не удалось получить правильный вывод.

Ответы [ 4 ]

5 голосов
/ 16 октября 2011

Exp() будет инверсией Log(), только если Log() является натуральным логарифмом . Если ваш Log() использует другую базу (база 2, база 10, любая другая произвольная база), вам нужно будет использовать другую базу вместо e в Exp().

Обновление

Попробуйте 10^(x/0.1)-1. x/0.1 отменяет операцию 0.1 *, 10^ отменяет log(), а -1 отменяет +1.

2 голосов
/ 14 февраля 2016

Я думаю, что вы определили 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

0 голосов
/ 09 декабря 2018

Это работает для обратного преобразования журнала

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');
0 голосов
/ 13 апреля 2013

Вы можете использовать степенное преобразование, чтобы сделать это, так как в степенном преобразовании вы можете сместить кривую, чтобы выполнить логарифмическое преобразование или выполнить обратное логарифмическое преобразование, которое воздействует на пиксели высокого уровня, но не на пиксели низкого уровня. Вы можете использовать это

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