MATLAB數字影象處理(一)基礎操作和傅立葉變換

天靖居士發表於2017-03-05

數字影象處理是一門集電腦科學、光學、數學、物理學等多學科的綜合科學。隨著電腦科學的發展,數字影象處理技術取得了巨大的進展,呈現出強大的生命力,已經在多種領域取得了大量的應用,推動了社會的發展。其中,遙感領域中,對於影像資料的處理均基於數字影象處理的技術。而遙感影像資料作為地理資訊科學的重要資料來源,如何從中獲取有用的資訊,是地理資訊資料處理中重要的內容。

MATLAB作為數學領域應用最廣泛的一種軟體,整合了對於圖片處理的函式和功能,成為了處理數字影象問題的佼佼者。其出眾的計算能力和簡便的繪圖能力可以有效進行數字影象的變換和操作。本文探究了MATLAB(R2014a)軟體下數字影象處理部分簡單內容方法的操作實現,包括影象變換、影象增強等。

由於時間所迫和水平不足,對於本文中的問題請指出。

在這裡首先將介紹基本的操作。

1  數字影象處理基礎

1.1            MATLAB影象處理基本操作

本文中對於大多數的操作,是對數字影象處理領域中最為著名的“lena”圖片進行操作的。原圖如下(Figure 1):

Figure 1

首先,在MATLAB中顯示這幅圖片:

I=imread('lena.jpg');
imfinfo('lena.jpg')
imshow(I);

其中,imread()可以讀取圖片,imfinfo()可以獲取圖片的資訊(Figure 2),imshow()可以顯示圖片。

 

Figure 2

從Figure 2中可以看出,該圖片格式為png,長寬均為512px,顏色型別為真彩色。

處理後的圖片還需要進行儲存:

imwrite(I,'lenaSave.jpg');

 

1.2            影象數字化

使用imread()讀取影象後,可以看到,讀入的圖片I是以一個512*512*3的矩陣進行儲存的,即分別是RGB顏色的數字圖片。為了方便起見,在本文中,筆者將lena圖進行了轉換,轉換為灰度圖,即儲存為一個512*512*1的矩陣。

為了完成這樣一個步驟,MATLAB中提供了相應的函式:

I1=rgb2gray(I);
imshow(I1);

I1以512*512*1的矩陣形式進行儲存。效果如下圖(Figure 3):

 

Figure 3

1.3            直方圖

為了顯示影象灰度的分佈情況,還需要繪製灰度直方圖。可以使用如下程式碼:

figure,imhist(I1);

效果如下(Figure 4):

 

Figure 4

1.4            影象噪聲的新增

為了完成多種影象處理的操作和試驗,還可以對圖片新增噪聲。所用函式為imnoise (I, type),該函式中的type可以為5種噪聲引數,分別為:'gaussian'(高斯白噪聲),'localvar'(與圖象灰度值有關的零均值高斯白噪聲),'poisson'(泊松噪聲),'salt & pepper'(椒鹽噪聲)和'speckle'(斑點噪聲)。

以下為高斯噪聲(Figure 5)和椒鹽噪聲(Figure 6)的程式碼和效果:

I2=imnoise(I1,'gaussian');
figure,imshow(I2);

 

Figure 5

I3=imnoise(I1,'salt & pepper');
figure,imshow(I3);

 

Figure 6

 

2         影象變換

2.1            傅立葉變換

傅立葉變換可以將影象從空間域轉換到頻率域,然後再進行相應的處理。MATLAB中有傅立葉變換的函式。

原圖:

 

Figure 7

傅立葉變換:

F=fft2(I1);
S=abs(F);
figure,imshow(S,[]);

效果:

 

Figure 8

看上去是一片黑,事實上在全圖的左上角可以看出有一個白點(即左上角缺失了)。

平移:

Fc=fftshift(F);
figure,imshow(abs(Fc),[]);

效果:

 

Figure 9

將頻率平移到中間。

頻譜圖:

figure,imshow(uint8(abs(Fc/256)));

效果:

 

Figure 10

之所以在本例中沒有使用lena的圖片,是因為該圖傅立葉頻譜圖並無特點。

傅立葉逆變換:

f=real(ifft2(F)/255);

figure,imshow(f);

效果:

 

Figure 11

經過逆變換後,仍然為原圖。

具體程式碼請參考:https://github.com/kkyyhh96/DigitalImageProcessing/tree/master/code中kyh_One.m和kyh_Two1.m的內容。

相關文章