Введение:

Сопоставление или спецификация гистограммы — это метод преобразования распределения интенсивности изображения в желаемое распределение. Основная цель — улучшить визуальное качество изображения, изменив его контраст, яркость или цвет. Этот метод полезен в таких приложениях, как медицинская визуализация, дистанционное зондирование и компьютерное зрение.

В этом сообщении блога мы обсудим код для сопоставления/спецификации гистограммы без использования встроенных функций. Код написан в MATLAB и состоит из трех разделов: расчет гистограммы, выравнивание гистограммы и сопоставление гистограммы. Мы подробно объясним каждый раздел и предоставим комментарии, где это необходимо.

Пояснение кода:

1. Расчет гистограммы:

Функция распределения вероятностей (PDF) и кумулятивная функция распределения (cdf) изображений определяются с использованием гистограмм целевого и эталонного изображений, которые вычисляются в первой части кода. В то время как cdf обеспечивает вероятность того, что значение интенсивности будет меньше или равно определенному значению, pdf обеспечивает вероятность того, что каждое значение интенсивности на изображении будет встречаться.

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

2. Выравнивание гистограммы:

Вторая часть кода выравнивает гистограммы каждого изображения. Выравнивание гистограммы — это метод преобразования дисперсии интенсивности изображения в равномерное распределение. Процедура используется для повышения контрастности и яркости изображения.

CDF изображения рассчитывается путем добавления вероятности каждого значения интенсивности к предыдущей вероятности. Чтобы получить функцию отображения, код масштабирует cdf до максимального значения интенсивности 255 и округляет результат до ближайшего целого числа. Для получения выровненного изображения функция отображения применяется к каждому пикселю изображения.

3. Сопоставление гистограммы:

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

Функция отображения между двумя изображениями первоначально рассчитывается путем сравнения их cdf. Алгоритм идентифицирует соответствующее значение интенсивности в эталонном изображении с более высоким значением cdf для каждого значения интенсивности в целевом изображении. Для получения совпадающего изображения функция сопоставления применяется к каждому пикселю целевого изображения.

Наконец, код использует функцию подграфика MATLAB для отображения трех изображений и связанных с ними гистограмм.

Вывод:

Мы рассмотрели код для сопоставления/спецификации гистограмм без использования встроенных функций в этой статье блога. Код разделен на три части: вычисление гистограммы, выравнивание и сопоставление. Мы подробно объяснили каждый аспект и включили комментарии, где это уместно. Сопоставление гистограммы — это полезный подход к улучшению визуального качества изображения путем изменения его контрастности, яркости или оттенка. Этот подход часто используется в приложениях медицинской визуализации, дистанционного зондирования и компьютерного зрения.

%Histogram of img1
target_img=imread('');
[x1, y1]=size(target_img);
himg1=zeros(1,256);
prob1=zeros(1,256);
t=x1*y1;
I=255;
for r=1:x1
  for c=1:y1
    v=target_img(r,c);
    himg1(v+1)=himg1(v+1)+1;
    prob1(v+1)=himg1(v+1)/t;
  end
end
cprob1=zeros(1,length(himg1));
floor1=zeros(1,256);
for r=2:length(himg1)
  cprob1(r)=prob1(r)+cprob1(r-1);
  floor1(r)=round(cprob1(r)*I);
end

%Histogram of img2
refrence_img=imread('');
[x2, y2]=size(refrence_img);
himg2=zeros(1,256);
prob2=zeros(1,256);
val=x2*y2;
for a=1:x2
  for b=1:y2
  z=refrence_img(a,b);
  himg2(z+1)=himg2(z+1)+1;
  prob2(z+1)=himg2(z+1)/val;
  end
end
cprob2=zeros(1,length(himg2));
floor2=zeros(1,256);
for a=2:length(himg2)
  cprob2(a)=prob2(a)+cprob2(a-1);
  floor2(a)=round(cprob2(a)*I);
end

%Histogram Equalization
hequimg1=zeros(x1,y1,'uint8');
for r=1:x1
  for c=1:y1
  hequimg1(r,c)=floor1(target_img(r,c)+1);
  end
end
hequimg2=zeros(x2,y2,'uint8');
for a=1:x2
  for b=1:y2
    hequimg2(a,b)=floor2(refrence_img(a,b)+1);
  end
end

%Histogram Matching
matching = zeros(1,256);
for n=1:size(target_img)
  for m=1:size(refrence_img)
    if cprob2(m)>cprob1(n)
      macthing(n)=m;
      break
    end
  end
end

%Generating the final output of the given image
matched_img = zeros(x1,y1,'uint8');
for i=1:x1
  for j=1:y1
    h=(target_img(i,j)+1);
    matched_img(i,j)=macthing(h);
  end
end

subplot(2,3,1); imshow(uint8(target_img)); title('Target image');
subplot(2,3,2); imshow(uint8(refrence_img)); title('Reference image');
subplot(2,3,3); imshow(uint8(matched_img)); title('Modified image');
subplot(2,3,4); imhist(target_img); title('Histogram of Target Imgae');
subplot(2,3,5); imhist(refrence_img); title('Histogram of Reference Imgae');
subplot(2,3,6); imhist(matched_img); title('Histogram of Modified Imgae');