基于FPGA的直方圖均衡化
掃描二維碼
隨時隨地手機看文章
基于FPGA的直方圖均衡化
1 直方圖均衡
直方圖均衡化是圖像處理領域中利用圖像直方圖對對比度進行調整的方法。通過這種方法,亮度可以更好地在直方圖上分布。這樣就可以用于增強局部的對比度而不影響整體的對比度,直方圖均衡化通過有效地擴展常用的亮度來實現(xiàn)這種功能。
一個灰度圖像,讓ni表示灰度i出現(xiàn)的次數(shù),這樣圖像中灰度為i 的像素的出現(xiàn)概率是
L 是圖像中所有的灰度數(shù),n 是圖像中所有的像素數(shù), p 實際上是圖像的直方圖,歸一化到 0..1。
把 c 作為對應于 p 的累計概率函數(shù), 定義為:
c 是圖像的累計歸一化直方圖。
我們創(chuàng)建一個形式為 y = T(x) 的變化,對于原始圖像中的每個值它就產(chǎn)生一個 y,這樣 y 的累計概率函數(shù)就可以在所有值范圍內進行線性化,轉換公式定義為:
yi = T(xi) = c(i)
注意 T 將不同的等級映射到 0..1 域。
上面描述了灰度圖像上使用直方圖均衡化的方法,但是通過將這種方法分別用于圖像RGB顏色值的紅色、綠色和藍色分量,從而也可以對彩色圖像進行處理。
直方圖均衡化簡單說明:
假設一幅大小為64*64像素(MN=4096)的3 bit圖像(L=8)的灰度分布如下表。其中灰度級是范圍[0,L-1]=[0-7]中的整數(shù)。
及S2=4.55,S3=5.67,S4=6.23,S5=6.65,S6=6.86,S7=7.00。在這一點上,S值一直是分數(shù),因為它們是通過求概率值的和產(chǎn)生的,因此我們要把他們近似為最接近的整數(shù):
2 matlab直方圖均衡
close all
clear all;
clc;
%imhist( i ):直接顯示圖像i的灰度直方圖(默認為255個灰度級);?
%imhist(i,n):n為指定灰度級顯示直方圖;?
%[count, x] = imhist( i ) 獲取直方圖信息,count為每一級灰度像素個數(shù),
% x為灰度級,x也可以在imhist(i,x)中指定,可以通過stem(x,count)畫相應直方圖;
% J=histeq(I,hgram);
% J=histeq(I,n);
% [J,T]=histeq(I);
% 注:hgram為歸一化(各元素均在[0,1]上)的灰度直方圖。
% [J,T]=histeq(I);返回圖像J的同時也返回變換向量。
I = imread('0.bmp');
Igray = rgb2gray(I);
Ieq =histeq(Igray);
Ihist = imhist(Ieq);
figure(1),
subplot(221),imshow(Igray);
title('Igray');
subplot(222),imhist(Igray);;
subplot(223),imshow(Ieq);
title('Ieq');
subplot(224),imhist(Ieq);
3 FPGA直方圖均衡
FPGA的直方圖均衡化(真)
FPGA的直方圖均衡化(偽)
直方圖均衡模塊的輸入為灰度圖像(未均衡化)輸出為均衡化圖像,采用偽均衡設計。
1,IDLE:空閑時刻,等待圖像幀有效到來跳轉到下一個狀態(tài)。
2,STATISTICS:直方圖的統(tǒng)計和映射,等待幀有效結束完成統(tǒng)計和直方圖的映射(直方圖均衡化)及跳轉到下一個狀態(tài)。
3,STATISTICS_ACC:對統(tǒng)計到的結果進行累加,完成后跳轉到下一個狀態(tài)。
4,NORMAL,EQU,WAIT_EQU:對灰度級進行歸一化運算,并等待幀有效到來進行重新映射。
fpga均衡化前
fpga均衡化后