1

У меня возникли проблемы с пониманием того, как изменить цветовой код изображения GIF в градациях серого после выполнения выравнивания гистограммы на изображении. Процесс совершенно прост с типами сжатия изображений, которые не имеют ассоциированной цветовой карты, например JPEG, и я получил ее для работы с изображениями в градациях серого.MATLAB Уравнивание гистограммы на изображениях GIF

clear 
clc 
[I,map] = imread('moon.gif'); 
h = zeros(256,1); %array value holds number of pixels with same value 
hmap = zeros(256,1); 
P = zeros(256,1); %probability that pixel intensity will appear in image 
Pmap = zeros(256,1); 
s = zeros(256,1); %calculated CDF using P 
smap = zeros(256,1); 
M = size(I,1); 
N = size(I,2); 
I = double(I); 

Inew = double(zeros(M,N)); 
mapnew = zeros(256,3); 
for x = 1:M; 
for y = 1:N; 
for l = 1:256; 
    %count pixel intensities and probability 
end 
end 
end 

for j = 2:256 
    for i = 2:j 
     %calculate CDF of P 
    end 
end 
s(1) = P(1); 
smap(1) = Pmap(1); 

for x = 1:M; 
for y = 1:N; 
for l = 1:256; 
    %calculates adjusted CDF and sets it to new image 
end 
end 
end 
mapnew = mapnew/256; 
Inew = uint8(Inew); 
I = uint8(I); 
subplot(1,2,1), imshow(Inew,map);  %comparing the difference between original map 
subplot(1,2,2), imshow(Inew,mapnew); %to'enhanced' colormap, but both turn out poorly 

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

Извините, что я не могу отправить изображения из-за моей низкой репутации, но я постараюсь предоставить всю информацию, которую я могу по запросу.

Любая помощь была бы принята с благодарностью.

+0

Предложение: вы можете загружать изображения на [imgur] (http://imgur.com/) и размещать ссылки. Более привилегированный пользователь может включить их в ваш вопрос для вас, пока вы не приобретете репутацию, чтобы сделать это сами ... и добро пожаловать в SO! –

+0

, если вы работаете с обычными изображениями (оттенки серого или truecolor), вы всегда можете использовать 'ind2gray' или' ind2rgb' для преобразования изображения и соответствующей цветовой карты в первый вид, а затем выполнить свою процедуру. fwiw MATLAB уже имеет функцию 'histeq', которая работает на всех типах изображений. – Amro

+0

Спасибо за помощь y'all! Функция ind2gray работает как очарование. Это было присвоение класса, поэтому histeq не могло быть и речи, за исключением того, чтобы убедиться, что ваш код работает. Я также буду иметь в виду использовать imgur для предоставления изображений. Еще раз, спасибо за помощь. –

ответ

0
function J=histeqo(I) 

    J=I; 
    [m,n]=size(I); 
    [h,d]=imhist(I); 
    ch=cumsum(h); // The cumulative frequency 
    imagesize=(m*n); // The image size lightsize=size(d,1);// The Lighting range 
    tr=ch*(lightsize/imagesize); // Adjustment function 

    for x=1:m 
     for y=1:n 
      J(x,y)=tr(I(x,y)+1); 
     end 
    end 
    subplot(1,2,1);imshow(J); 
    subplot(1,2,2);imhist(J); 
end 
+0

добро пожаловать в SO и благодарим вас за ответ. Обратите внимание, что это англоязычный сайт. Можете ли вы изменить свой ответ, чтобы включить только комментарии на английском языке? – Shai

+0

чувак вам не нужно писать на персидском !!! я отредактирую его ... – dariush