圖像增強(qiáng)
圖像增強(qiáng)的方法是通過(guò)一定手段對(duì)原圖像附加一些信息或變換數(shù)據(jù),有選擇地突出圖像中感興趣的特征或者抑制(掩蓋)圖像中某些不需要的特征,使圖像與視覺(jué)響應(yīng)特性相匹配。
圖像對(duì)比度
圖像對(duì)比度計(jì)算方式如下:
C
=
∑
δ
δ
(
i
,
j
)
P
δ
(
i
,
j
)
C=\displaystyle\sum_{{\delta}}\delta(i,j)P_\delta(i,j)
C=δ∑?δ(i,j)Pδ?(i,j)
其中,
δ
(
i
,
j
)
=
∣
i
?
j
∣
\delta(i,j)=\lvert i-j\rvert
δ(i,j)=∣i?j∣,即相鄰像素間的灰度差;
P
δ
(
i
,
j
)
P_\delta(i,j)
Pδ?(i,j)為相鄰像素灰度差為
δ
\delta
δ的像素分布概率??梢允撬泥徲?,也可以是八鄰域。具體過(guò)程如下:
原始圖像為:
L
=
[
1
3
5
2
1
3
3
6
0
]
L=\begin{bmatrix} 1 & 3 &5\\ 2 & 1 &3 \\ 3 & 6&0 \end{bmatrix}
L=
?123?316?530?
?
按照四鄰域進(jìn)行計(jì)算,對(duì)比度
C
L
=
[
(
1
2
+
2
2
)
+
(
2
2
+
2
2
+
2
2
)
+
(
1
2
+
1
2
+
1
2
)
+
(
2
2
+
2
2
+
1
2
+
5
2
)
+
(
2
2
+
2
2
+
3
2
)
+
(
1
2
+
3
2
)
+
(
5
2
+
3
2
+
6
2
)
+
(
3
2
+
6
2
)
/
22
C_L=\lbrack(1^2+2^2)+(2^2+2^2+2^2)+(1^2+1^2+1^2)+(2^2+2^2+1^2+5^2)+(2^2+2^2+3^2)+(1^2+3^2)+(5^2+3^2+6^2)+(3^2+6^2)/22
CL?=[(12+22)+(22+22+22)+(12+12+12)+(22+22+12+52)+(22+22+32)+(12+32)+(52+32+62)+(32+62)/22。22就是平方的個(gè)數(shù)。
1.對(duì)比度展寬
對(duì)比度展寬的目的是通過(guò)增強(qiáng)圖像的亮暗對(duì)比程度而改善畫(huà)質(zhì),使圖像的顯示效果更加清晰。
線性對(duì)比度展寬
通過(guò)抑制非重要信息的對(duì)比度來(lái)騰出空間給重要信息進(jìn)行對(duì)比度的展寬。
原圖的灰度為
f
(
i
,
j
)
f(i,j)
f(i,j),處理后的圖像灰度為
g
(
i
,
j
)
g(i,j)
g(i,j)。原圖中的重要景物的灰度分布假設(shè)分布在
[
f
a
,
f
b
]
\lbrack f_a,f_b\rbrack
[fa?,fb?]的范圍內(nèi),則對(duì)比度線性展寬的目的是使處理后圖像的重要景物的灰度分布在
[
g
a
,
g
b
]
\lbrack g_a,g_b\rbrack
[ga?,gb?]的范圍內(nèi),當(dāng)
Δ
f
=
(
f
b
?
f
a
)
<
Δ
g
=
(
g
b
?
g
a
)
\varDelta f=(f_b-f_a)<\varDelta g=(g_b-g_a)
Δf=(fb??fa?)<Δg=(gb??ga?),則可達(dá)到對(duì)比度展寬的目的。
計(jì)算方式如下:
g
(
i
,
j
)
=
{
α
f
(
i
,
j
)
?
0
≤
f
(
i
,
j
)
<
a
β
(
f
(
i
,
j
)
?
a
)
+
g
a
?
a
≤
f
(
i
,
j
)
<
b
γ
(
f
(
i
,
j
)
?
b
)
+
g
b
b
≤
f
(
i
,
j
)
<
255
g(i,j)= \begin{cases} \alpha f(i,j) &\text{ } 0\le f(i,j)<a \\ \beta (f(i,j)-a)+g_a &\text{ } a\le f(i,j)<b \\ \gamma (f(i,j)-b)+g_b &b\le f(i,j)<255 \end{cases}
g(i,j)=?
?
??αf(i,j)β(f(i,j)?a)+ga?γ(f(i,j)?b)+gb???0≤f(i,j)<a?a≤f(i,j)<bb≤f(i,j)<255?
其中,
α
=
g
a
f
a
,
β
=
g
b
?
g
a
f
b
?
f
a
,
γ
=
255
?
g
b
255
?
f
b
\alpha =\frac{g_a}{f_a},\beta =\frac{g_b-g_a}{f_b-f_a},\gamma =\frac{255-g_b}{255-f_b}
α=fa?ga??,β=fb??fa?gb??ga??,γ=255?fb?255?gb??。
C++代碼如下:
cv::Mat image = cv::imread("Lena.bmp");
cv::Mat grayImage(image.size(), CV_8UC1);
cv::Mat dstImage(grayImage.size(), CV_8UC1);
cv::cvtColor(image, grayImage, CV_BGR2GRAY);
int fa = 50, fb = 100;
float ga = 30, gb = 120;
for (int row = 0; row < grayImage.rows; row++)
{
uchar *currentData = grayImage.ptr<uchar>(row);
for (int col = 0; col < grayImage.cols; col++)
{
if (*(currentData + col) >= 0 && *(currentData + col) < fa)
{
dstImage.at<uchar>(row, col) = uchar(ga / fa * (*(currentData + col)));
}
if (*(currentData + col) >= fa && *(currentData + col) < fb)
{
dstImage.at<uchar>(row, col) = uchar((gb-ga) / (fb-fa) * (*(currentData + col)-fa)+ga);
}
if (*(currentData + col) >= fb && *(currentData + col) < 255)
{
dstImage.at<uchar>(row, col) = uchar((255-gb) / (255-fb) * (*(currentData + col)-fb)+gb);
}
}
//currentData++;
}
結(jié)果如下:
非線性對(duì)比度展寬
通過(guò)一個(gè)光滑的映射曲線,使得處理后圖像的灰度變化比較光滑。計(jì)算公式如下:
g
(
i
,
j
)
=
c
?
l
g
(
1
+
f
(
i
,
j
)
)
g(i,j)=c\cdot lg(1+f(i,j))
g(i,j)=c?lg(1+f(i,j))
實(shí)際上完成的作用是,抑制高亮度區(qū)域,擴(kuò)展低亮度區(qū)域。
2.直方圖均衡化
在信息論中有這樣一個(gè)結(jié)論:當(dāng)數(shù)據(jù)的分布接近均勻分布的時(shí)候,數(shù)據(jù)所承載的信息量(熵)為最大。
灰度直方圖的基本原理是:對(duì)在圖像中像素個(gè)數(shù)多的灰度級(jí)(即對(duì)畫(huà)面起主要作用的灰度值)進(jìn)行展寬,而對(duì)像素個(gè)數(shù)少的灰度值(即對(duì)畫(huà)面不起主要作用的灰度值)進(jìn)行歸并。
直方圖均衡化方法的具體步驟如下:
- 求出原圖 f ( i , j ) M × N f(i,j)_{M\times N} f(i,j)M×N?的灰度直方圖,設(shè)用256維的向量 h f h_f hf?表示;
- 有
h
f
h_f
hf?求原圖的灰度分布概率,記作
p
f
p_f
pf?,則有
p
f
(
i
)
=
1
N
f
?
h
f
(
i
)
,
i
=
0
,
1
,
…
,
255
p_f(i)=\frac{1}{N_f}\cdot h_f(i),i=0,1,\dots ,255
pf?(i)=Nf?1??hf?(i),i=0,1,…,255
其中, N f = M × N N_f=M\times N Nf?=M×N( M , N M,N M,N分別為圖像的長(zhǎng)和寬)為圖像的總像素個(gè)數(shù); - 計(jì)算圖像各個(gè)灰度值的累計(jì)分布概率,記作
p
a
p_a
pa?,則有
p
a
(
i
)
=
∑
k
=
0
i
p
f
(
k
)
,
i
=
1
,
2
,
…
,
255
p_a(i)=\displaystyle\sum_{k=0}^ip_f(k),i=1,2,\dots ,255
pa?(i)=k=0∑i?pf?(k),i=1,2,…,255
其中,令 p a ( 0 ) = 0 p_a(0)=0 pa?(0)=0。 - 進(jìn)行直方圖均衡化計(jì)算,得到處理后圖像的像素值 g ( i , j ) g(i,j) g(i,j)為: g ( i , j ) = 255 ? p a ( k ) g(i,j)=255\cdot p_a(k) g(i,j)=255?pa?(k)
C++代碼如下所示:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-619744.html
cv::Mat image = cv::imread("Lena.bmp");
cv::Mat src(image.size(), CV_8UC1);
//轉(zhuǎn)為灰度圖像
cv::cvtColor(image, src, CV_BGR2GRAY);
cv::Mat dst(image.size(), CV_8UC1);
float hf[256] = { 0 };
for (int row = 0; row < src.rows; row++)
{
uchar *currentData = src.ptr<uchar>(row);
for (int col = 0; col < src.cols; col++)
{
hf[*(currentData + col)] += 1;
}
}
float pf[256] = { 0 };
for (int i = 0; i < 256; i++)
{
pf[i] = hf[i] / (src.rows*src.cols);
}
float pa[256] = { 0 };
for (int i = 1; i < 256; i++)
{
float sumNumber = 0;
for (int j = 0; j < i+1; j++)
{
sumNumber += pf[j];
}
pa[i] = sumNumber;
}
for (int row = 0; row < dst.rows; row++)
{
uchar * currentData = dst.ptr<uchar>(row);
for (int col = 0; col < dst.cols; col++)
{
*(currentData + col) = uchar(255 * pa[src.at<uchar>(row, col)]);
}
}
結(jié)果展示:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-619744.html
到了這里,關(guān)于數(shù)字圖像處理(番外)圖像增強(qiáng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!