直方圖匹配(規定化)原理及實現
阿新 • • 發佈:2018-12-10
原理參看下圖,直方規範化的理論思路。
離散情況,參看下一個圖,介紹實際影象中,直方規範化的步驟,看懂即可。
演算法步驟:(具體可參看原始碼中註釋)
1. 讀取標準影象變成灰度影象,得到累計直方圖
2. 讀取原圖變成灰度影象,得到累計直方圖
3. 比較每個灰度級,得到對映關係:方法找到兩個累積直方圖距離最近的點
4. 原圖灰度對映到新的灰度
clear all; close all; % 擴充套件原影象形成中間影象的高斯濾波 orgin=imread('lena.jpg'); orgin=rgb2gray(orgin); %讀入原影象 [m_o,n_o]=size(orgin); orgin_hist=imhist(orgin)/(m_o*n_o); standard = imread('1.jpg');% 讀入標準圖 standard=rgb2gray(standard); [m_s,n_s]=size(standard); standard_hist=imhist(standard)/(m_s*n_s); startdard_value=[]; % 標準圖累積直方 orgin_value=[]; % 原影象累積直方 for i=1:256 startdard_value=[startdard_value sum(standard_hist(1:i))]; orgin_value=[orgin_value sum(orgin_hist(1:i))]; end for i=1:256 value{i}=startdard_value-orgin_value(i); value{i}=abs(value{i}); [temp index(i)]=min(value{i}); end newimg=zeros(m_o,n_o); for i=1:m_o for j=1:n_o newimg(i,j)=index(orgin(i,j)+1)-1; end end newimg=uint8(newimg); subplot(2,3,1);imshow(orgin);title('原圖'); subplot(2,3,2);imshow(standard);title('標準圖'); subplot(2,3,3);imshow(newimg);title('myself匹配到標準圖'); subplot(2,3,4);imhist(orgin); title('原圖'); subplot(2,3,5);imhist(standard); title('標準圖'); subplot(2,3,6);imhist(newimg); title('myself匹配到標準圖');