matlab影像點運算 對比度增強 對比度拉伸 灰度變換

Ibelievesunshine發表於2018-04-15

點運算又稱為對比度增強、對比度拉伸或灰度變換,是一種通過影像中的每一個畫素值進行運算的影像處理方式。。它將輸入影像對映為輸出影像,輸出影像每個畫素點的灰度值僅有對應的輸入畫素點的灰度值決定,運算結果不會改變影像內畫素點之間的空間關係。其運算的數學關係式如下:

其中,A(x,y)表示原影像,B(x,y)表示經過點運算處理後的影像,f表示點運算的關係函式。按照灰度變換的數學關係,點運算可以分為線性灰度變換、分段線性灰度變換和非線性灰度變換3種。接下來我們分別舉例實現。

1. 線性灰度變換

假定原影像A(x,y)的灰度變換範圍為[a,b],處理後的影像B(x,y)的灰度變換範圍為[c,d],線性灰度變換運算的數學表示式為:

在MATLAB影像處理工具箱中提供了一個灰度線性變換函式imadjust()

close all;clear all;clc;
%通過函式imadjust()對影像進行線性灰度變換
gamma=0.5;  %設定調整線性度取值
I=imread('F:/pao1.jpg');
R=I;  %將影像資料賦值給R
R(:,:,2)=0;  %將原影像變成單色影像,保留紅色
R(:,:,3)=0;
R1=imadjust(R,[0.5 0.8],[0 1],gamma);  %利用函式imajust()調整R的灰度,結果返回R1
G=I;
G(:,:,1)=0;  %將原影像變成單色影像,保留綠色
G(:,:,3)=0;
G1=imadjust(G,[0 0.3],[0 1],gamma);  %利用函式imajust()調整G的灰度,結果返回G1
B=I;
B(:,:,1)=0;  %將原影像變成單色影像,保留藍色
B(:,:,2)=0;
B1=imadjust(B,[0 0.3],[0 1],gamma);  %利用函式imajust()調整B的灰度,結果返回B1
I1=R1+G1+B1;  %求變換後的RGB影像
figure,
subplot(131),imshow(I);
subplot(132),imshow(R);
subplot(133),imshow(R1);
figure,
subplot(131),imshow(I);
subplot(132),imshow(G);
subplot(133),imshow(G1);
figure,
subplot(131),imshow(I);
subplot(132),imshow(B);
subplot(133),imshow(B1);
figure,
subplot(121),imshow(I);
subplot(122),imshow(I1);

2. 分段線性灰度變換

為了突出影像中感興趣的目標或者灰度區間,可採用分段線性法,將需要的影像細節灰度拉伸,對比度增強。3段線性變換法運算的數學表示式如下:

close all;clear all;clc;
%分段線性灰度變換
R=imread('F:/pao1.jpg');
J=rgb2gray(R);  %將彩色影像資料R轉換為灰度影像資料J
[M,N]=size(J);  %獲得灰度影像J的行列數M,N
x=1;y=1;
for x=1:M
    for y=1:N
        if (J(x,y)<=35);  %對灰度影像J進行分段處理,處理後的結果返回給矩陣H
            H(x,y)=J(x,y)*10;
        elseif(J(x,y)>35&J(x,y)<=75);
            H(x,y)=(10/7)*[J(x,y)-5]+50;
        else(J(x,y)>75);
            H(x,y)=(105/180)*[J(x,y)-75]+150;
        end
    end
end
figure,
subplot(121),imshow(J);
subplot(122),imshow(H);

3. 非線性灰度變換

當輸出影像的畫素點灰度值和輸入影像的畫素點灰度值不滿足線性關係時,這種灰度變換都稱為非線性灰度變換,我們以對數變換的非線性變換為例,講解非線性灰度變換。變換公式如下:

close all;clear all;clc;
%基於對數變換的非線性灰度變換
R=imread('F:/pao1.jpg');
G=rgb2gray(R);  %轉換成灰度影像
J=double(G);  %資料型別轉換為雙精度
H=(log(J+1))/10;  %進行基於常用對數的非線性灰度變換
figure,
subplot(121),imshow(G);
subplot(122),imshow(H);

總結:

以上三種方法給出了三種不同型別的點運算,它們的相同之處在於都能夠改變影像的顯示灰度,不同之處在於採用的數學方法不同。使用者在需要進行圖形灰度變換時,根據實際情況選擇不同的運算形式,使用者可參照例項設計自己的灰度變換。


------想飛上天,和太陽肩並肩------

相關文章