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