數字圖像處理-灰度變換(附MATLAB代碼)

目錄

圖像增強

1.灰度變換

(1)線性變換

(2)分段線性變換

(3)非線性灰度變換

2.直方圖修正法

(1)直方圖均衡化

(2)直方圖規定化

圖像增強

圖像增強的目的:(1)利用一系列技術改善圖像的視覺效果,提高圖像清晰度。(2)將圖像轉換爲一種更適合人或機器進行分析處理的形式,抑制無用信息,提高圖像使用價值。

圖像增強從作用域劃分爲:空間域增強、頻率域增強、彩色增強。

其中,空間域增強是直接對圖像像素灰度進行操作。包括:點運算和局部運算。

頻率域是經過傅里葉變換後對圖像頻譜進行操作,最後進行逆變換得到結果。

點運算包括:灰度變換、直方圖修正法和局部統計法

1.灰度變換

灰度變換使得圖像的動態範圍增大,增強對比度,讓圖像變得更清晰,特徵更明顯。

其中包括:線性變換、分段線性變換、非線性灰度變換。

(1)線性變換

圖像的灰度集中在較亮的區域而導致圖像偏亮,這個時候可以對圖像的每一個像素灰度作線性拉伸。

原圖像f(i,j)的灰度範圍爲[a,b],線性變換後圖像g(i,j)的範圍爲[a1,b1]

關係式爲:g(i,j) = a1+\frac{b1-a1}{b-a}[f(i,j)-a]

A = imread('412.jpg');
A1 = rgb2gray(A);%彩色圖像轉爲灰度圖像
a1 = 0;
b1 = 255;%線性變換後的範圍
%imhist(A1)%查看灰度直方圖
subplot(121),imshow(A1);
a = 50;
b = 250;%原圖像範圍
A2 = a1+(b1-a1)/(b-a)*(A1-a);
subplot(122),imshow(A2);

(2)分段線性變換

爲了突出感興趣的目標,抑制不感興趣的目標,可以採用分段線性變換。

公式:

g(i,j) = \left\{\begin{matrix} (\frac{c}{a})f(i,j) & 0\leq f(i,j)\leq a\\ (d-c)/(b-a)[f(i,j)-a]+c & a\leq f(i,j)< b\\ [(M-d)/(M-b)][f(i,j)-b]+d & b \leq f(i,j)< M \end{matrix}\right.

A = imread('412.jpg');
A1 = im2double(rgb2gray(A));%彩色圖像轉爲灰度圖像
[h,w] = size(A1);
A2 = zeros(h,w);
a = 0.2;
b = 0.8;
c = 0.1;
d = 0.9;
for i = 1:h
    for j = 1:w
        if A1(i,j)<=a
            A2(i,j) = (c/a) * A1(i,j);
        elseif A1(i,j)<b
            A2(i,j) = (d-c)/(b-a)*(A1(i,j) - a) + c;
        else 
            A2(i,j) = (1-d)/(1-b)*(A1(i,j) - b) + d;
        end
    end
end
subplot(121),imshow(A1),title('原圖');
subplot(122),imshow(A2),title('分段灰度變換');

(3)非線性灰度變換

某些非線性函數:對數函數、指數函數等作爲映射函數的時候,可實現非線性變換。

1.對數變換

對低灰度區進行拉伸,對高灰度區進行壓縮。

g(i,j) = a+\frac{ln[f(i,j)+1]}{b·lnc}

A = imread('412.jpg');
A1 = im2double(rgb2gray(A));%彩色圖像轉爲灰度圖像
subplot(221),imhist(A1)%查看灰度直方圖
subplot(222),imshow(A1);
A2 = log(A1+1);
subplot(223),imhist(A2)
subplot(224),imshow(A2);

 

2.指數變換

對高灰度區拉伸。

g(i,j) = b^{c[f(i,j)-a]}-1

A = imread('412.jpg');
A = rgb2gray(A);
A1 = double(A);
A2 = 1.5.^(A1*0.070)-1;
A1 = uint8(A1);
A2 = uint8(A2);
subplot(221),imhist(A1)%查看灰度直方圖
subplot(222),imshow(A1);
subplot(223),imhist(A2)
subplot(224),imshow(A2);

這裏我發現了MATLAB裏面 im2double 和 double原來是有區別的?於是去查了下……

(被這個坑了一個小時的我淚流滿面)

im2double()是轉換爲double類型以後並且歸一化爲[0,1]中,而double沒有做此處理。

2.直方圖修正法

一般的圖像灰度分佈集中在較窄的區間,導致圖像細節不清晰,使用直方圖修正法可以讓圖像的灰度間距拉開或者讓灰度分佈均勻而增大反差,使得圖像細節清晰。

直方圖修正法包括:直方圖均衡化和直方圖規定化。

(1)直方圖均衡化

直方圖均衡化是將原圖像的直方圖通過變換函數修正爲均勻的直方圖,然後按均衡直方圖修改原圖像。

變換函數:(離散)

Sk = T(Rk) = \sum \frac{nj}{n}

ps.咦怎麼打不出求和函數……

MATLAB裏剛好有histeq()函數可以用於均衡化。

其中:histeq()有兩個參數,第一個參數爲要處理的圖像,第二個參數爲處理後的灰度級個數。

A = imread('412.jpg');
A1 = rgb2gray(A);
A2 = histeq(A1,64);
subplot(221),imhist(A1)%查看灰度直方圖
subplot(222),imshow(A1);
subplot(223),imhist(A2)
subplot(224),imshow(A2);

(2)直方圖規定化

直方圖規定化是使原圖像灰度直方圖變成規定形狀的直方圖來對圖像作修正。

直方圖均衡化是直方圖規定化的一個特例。

A = imread('412.jpg');
A1 = rgb2gray(A);
h=0:255;
h=1-h/255;%目標直方圖
A2 = histeq(A1,h);
subplot(221),imhist(A1)%查看灰度直方圖
subplot(222),imshow(A1);
subplot(223),imhist(A2)
subplot(224),imshow(A2);

  --------------------------end------------------------

下一篇總結圖像空間域平滑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章