Giới thiệu về các hàm xử lý ảnh, các bộ lọc, các hàm nhiễu, và phép nội suy sử dụng trong Matlab
ĐẠI HỌC LÊ QUÝ ĐÔN
BỘ MÔN ĐTYS
______**&**______
Thiết bị chẩn đoán hình ảnh II
Đề tài: Nghiên cứu công cụ xử lý ảnh trong Matlab và xây dựng chương trình
xử lý và nhận dạng ảnh chụp cắt lớp máy tính
Sinh viên thực hiện :
Phạm Thị Thu Hương
Hoàng Thị Ngọc Linh
Vũ Mai Phương
Trần Thị Quỳnh
Hà Nội, 2016
1
MỤC LỤC
I. PHÂN TÍCH CÁC HÀM XỬ LÝ ẢNH TRONG MATLAB ....................... 4
1.1. HỌ CÁC HÀM ĐỌC GHI ẢNH ............................................................................ 4
1.1.1. Hàm imread ............................................................................................ 4
1.1.2. Hàm imwrite ........................................................................................... 4
1.1.3. Hàm imfinfo ............................................................................................ 4
1.1.4. Hàm image .............................................................................................. 5
1.1.5. Hàm imagesc .......................................................................................... 5
1.1.6. Hàm imshow ........................................................................................... 9
1.1.7. Hàm imtool ........................................................................................... 10
1.2. HỌ CÁC HÀM BIẾN ĐỔI ẢNH.......................................................................... 11
1.2.1. Biến đổi Fourier rời rạc (fft) .............................................................. 11
1.2.2. Hàm Radon ........................................................................................... 14
1.3. CÁC HỌ HÀM XỬ LÝ ẢNH .............................................................................. 17
1.3.1. Thay đổi kích thước ảnh ....................................................................... 17
1.3.2. Quay ảnh .............................................................................................. 19
1.3.3. Xén ảnh ................................................................................................. 20
1.3.4. Các biến đổi ảnh thông dụng ............................................................... 22
1.3.5. Các hàm tạo nhiễu cho ảnh .................................................................. 24
1.3.5.1. Nhiễu Salt and Peper ......................................................................... 24
1.3.5.2. Nhiễu Gaussian ................................................................................ 25
1.3.5.3. Nhiễu Speckle ................................................................................... 26
1.4. HỌ CÁC HÀM LỌC ......................................................................................... 27
1.4.1. Bộ lọc lý tưởng ..................................................................................... 27
1.4.1.1. Lọc thông thấp lý tưởng .................................................................... 27
1.4.1.2. ọ t
lý tưở ..................................................................... 27
1.4.2. ộ lọc utt
th ............................................................................... 28
1.4.2.1. Bộ lọc butterworth thông thấp .......................................................... 28
1.4.2.2. Bộ lọc butterworth thông cao ............................................................ 29
1.4.3. Bộ lọc Gauss ......................................................................................... 29
1.4.4. Tạo bộ lọc 2-D biết t ước ..................................................................... 30
1.4.5. H lọc i ilt .................................................................................... 34
1.4.6. ộ lọc nl ilt ........................................................................................ 36
1.4.7. H lọc c l ilt ...................................................................................... 38
1.4.8. ộ lọc
ilt........................................................................................ 40
2
1.4.9. ộ lọc
ilt ....................................................................................... 42
1.4.10. Hàm lọc wiener 2 ................................................................................. 43
1.4.11. Hàm lọc trung bình .............................................................................. 44
1.5. HỌ CÁC HÀM NỘI SUY .................................................................................. 45
1.5.1. Cơ sở toán học của phương pháp nội suy ............................................ 45
1.5.1.1. Nội suy Lagrange .............................................................................. 45
1.5.1.2. Nội suy Newton................................................................................. 47
1.5.1.3. Nội suy Gauss ................................................................................... 49
1.5.1.4. Nội suy Sterling................................................................................. 51
1.5.1.5. Nội suy Bessel ................................................................................... 51
1.5.2. Phép nội suy ......................................................................................... 52
II. MỘT SỐ VÍ DỤ MINH HỌA ........................................................................ 56
2.1. VÍ DỤ ........................................................................................................... 56
2.2. CHƯƠNG TRÌNH XỬ LÝ ẢNH.......................................................................... 90
3
I.
PHÂN TÍCH CÁC HÀM XỬ LÝ ẢNH TRONG MATLAB
1.1. Họ các hàm đọc ghi ảnh
1.1.1. Hàm imread
ă
a. Chứ
Hàm imre d đọc các file ảnh với bất kì á định dạng ản đã biết hiện nay và
lưu lại dưới dạng một ma trận biểu diễn ảnh trong Matlab.
b. Cú pháp
A = imread(filename,fmt)
[X,map] = imread(A,fmt)
Giải thích:
- Filename: chuỗi xá định tên file cầ đọc cùng với đường dẫn (nếu file này
không nằm trong mụ t ư mục hiện hành).
- Fmt: chuỗi cho biết định dạng của ả
. VD: ‘bmp’,’ if’,jp ’,…
Ví dụ:
A=imre d(‘eight.jp ’).
1.1.2. Hàm imwrite
a. Chứ
ă
Hàm write lưu một ảnh biểu diễn bằng một ma trận trong Matlab thành một
file ả
dưới một tr
á đạnh dạng ả
đã biết.
b. Cú pháp
imwrite(A,filename,fmt)
Imwrite(X,map,filename,fmt)
VD: imwrite(A,’ei t.jp ’).
1.1.3. Hàm imfinfo
a. Chứ
Dù
ă
để xem các thông số của một file ả
à đó.
b. Cú pháp
imfinfo(filename,fmt)
Cá t
ti đượ
u
ấp bởi àm imfi f là : file me, filem dd te,
filesize, format, formatversion, width, height, bitdepth, colortype
4
VD: imfi f r(‘ei
.jp ’)
Matlab cung cấp hai hàm hiển thị cơ bản là image và imagesc. Ngoài ra
trong IPT cũng có hai hàm hiển thị ảnh khác, đó là imview và imshow
1.1.4. Hàm image
a. C ứ
ă
Hiể t ị ì
:
ả .
b. Cú pháp
Image(X,Y,C)
Giải t í :
Hiể t ị ì
trụ tọ độ iệ
tr
ệ trụ
ả
biểu diễ bởi m trậ C kí
à . X, Y là á ve t r xá đị
iệ
t ướ M x N lê
vị trí á pixel C(1,1) và C(M,N)
à .
VD: load mandrill image(X) coloemap(map).
1.1.5. Hàm imagesc
a. C ứ
ă
Tươ
dụ
:
tự
ư àm im e,
t à bộ bả đồ màu iệ
ại trừ việ dữ liệu ả
sẽ đượ
iã để sử
à .
b. Cú pháp
imagesc(C)
imagesc(x,y,C)
imagesc(...,clims)
imagesc('PropertyName',PropertyValue,...)
h = imagesc(...)
Giải t í : Cá
ứ
ă
im es quy m dữ liệu ì
l ại bả đồ màu iệ tại và iể t ị ì
imagesc (C) sẽ iể t ị C
với một k u vự
ỉ số s
ì
ữ
ì
bả đồ màu iệ tại để xá đị
imagesc (x, y, C) sẽ iể t ị C
ả . Mỗi p ầ tử ủ C tươ
ả . Cá
màu sắ
ư một ì
ủ x và trụ y với ve tơ x và y. Nếu x (1)> x (2)
lật trái p ải
ặ lê xuố
, tươ
với đầy đủ á
ả .
ư một ì
ật tr
ả
iá trị ủ
á p ầ tử ủ C là
ủ mỗi miế
ả
điểm.
và xá đị
ặ y (1)> y (2), ì
ứ . Nếu x và y là v
ứ
ướ , ì
á
iới ạ
ả
đượ
ả
đượ
5
p iê dị
s
á vị trí quy đị
(x, y) s
ó trê bê trái ủ
ì
ả
bắt
ỉ đị
bởi
đầu tại (x, y).
uẩ
imagesc (..., clims)
clims và iể t ị C
p ạm vi ủ
tr
á
ó
ư một ì
á
iá trị tr
C đế p ạm vi
ả . lims là một ve t r
iá trị dữ liệu tr
C. N ữ
i yếu tố đó iới ạ
iá trị m p ày để đầy đủ á
iá trị
bả đồ màu iệ tại.
imagesc ( 'PropertyName', PropertyValue, ...) là ú p áp ở mứ độ t ấp
ủ
àm im es . Nó
ỉ đị
đầu và . Xem t uộ tí
ủ
ì
ỉ ó pr perty
ả
me/pr perty v lue
một d
sá
ư á đối số
á tê t uộ tí
và iá trị
ọ.
h = imagesc (...) trả về xử lý
một ì
ả
đối tượ
đồ ọ .
c. Ví dụ
Bạ
ó t ể mở rộ
độ p â
t ấp để màu đầu tiê và iá trị
á
xá đị
iới ạ
nay là 81-by-3, á
iải màu sắ tầm tru
bằ
á
với màu sắ
tr
bả đồ màu bằ
uối ù
iá trị màu ( lims). Nếu kí
t ướ
á
xạ iá trị
ủ bả đồ màu iệ
âu lệ
clims = [ 10 60 ]
imagesc(C,clims)
Bả đồ á
iá trị dữ liệu tr
C để bả đồ màu
ư tr
ì
mi
ọ
này và các mã sau:
6
Tr
ví dụ ày, ì
ả
bê trái bả đồ để bả đồ màu xám sử dụ
á
âu lệ :
load clown
figure
subplot(1,2,1)
imagesc(X)
colormap(gray)
axis image
title('Default CLim (= [1 81])')
Những hình ảnh bên phải có giá trị từ 10 đến 60 có quy mô với đầy đủ các
loại bả đồ màu xám sử dụng các câu lệnh:
subplot(1,2,2)
clims = [10 60];
imagesc(X,clims)
colormap(gray)
axis image
title('CLim = [10 60]')
7
Ví dụ này cho thấy làm thế à để t y đổi hình ảnh bắt đầu từ nguồn gốc
đến một vị trí (100, 100)
i = imread('eight.tif');
figure; subplot(2,2,1);
imagesc(i);
axis([0 400 0 400]);
colormap(gray);
subplot(2,2,2); imagesc(100,100,i);
axis([0 400 0 400]);
colormap(gray);
Cá
ì
đầu r
ư là:
8
Góc trên bên phải của hình ảnh bây giờ là bắt đầu từ (100.100) thay vì ảnh
gốc.
Đi qu
á
iá trị vector với hình ảnh quy mô các hình ảnh với kí
t ước
định số 400-by-400.
figure; imagesc(1:400,1:400,i);
colormap(gray);
1.1.6. Hàm imshow
a. Chứ
Cũ
ă
tạ một đối tượ
fi ure. Hàm ims
w sẽ tự độ
và fi ure để t ể iệ
ì
đồ ọ t uộ l ại im e và iể t ị ả
t iết lập á
iá trị ủ
á đối tượ
trê một
im e, xes
ả .
b. Cú pháp
Imshow (I) % iể t ị ả
màu xám I.
c. Ví dụ
9
Ims
w(‘b rd.tif’) % Hiể t ị một ì
ả
từ file.
1.1.7. Hàm imtool
a. C ứ
ă
Hiể t ị ả
trê im e t l, là một m i trườ
biểu diễ một số tá vụ xử lý ì
ả
tí
ợp để iể t ị ả
và
p ổ biế .
b. Cú pháp
Imtool (I) % Hiể t ị ả
Imt
l mở r một
dụ
á tùy
ả
để iể t ị.
ọ trì
màu xám I.
ụ ì
đơ File Ope
ả
mới tr
một trạ
t ái trố
ặ N ập từ W rksp e để
rỗ
. Sử
ọ một ì
c. Ví dụ
10
Imt
l(‘b rd.tif’)
1.2. Họ các hàm biến đổi ảnh
1.2.1. Biến đổi Fourier rời rạc (fft)
a. Cú pháp
Y = fft(X)
Y = fft(X,n)
Y = fft(X,[],dim)
Y = fft(X,n,dim)
b. Chứ
ă
Y = FFT (X) trả về biế đổi Fourier rời rạc (DFT) của vector X, tính toán với
một thuật toán biế đổi nhanh Fourier (FFT).
Nếu X là một ma trận, FFT trả về biế đổi Fourier của mỗi cột của ma trận.
Nếu X là một mả
đ
iều, FFT hoạt động trên chiều
si let
đầu
tiên.
Y = FFT (X, n) trả về DFT n-điểm. Nếu chiều dài của X nhỏ ơ
đệm và đu i số 0 theo chiều dài n. Nếu chiều dài của X lớ
ơ
, X được
, trình tự X được
11
cắt ngắn. Khi X là một ma trận, chiều dài của các cột đượ điều chỉnh trong cùng
một cách thức.
Y = FFT (X, [], dim) và Y = FFT (X, n, dim) áp dụng các hoạt động FFT
trê dim kí
t ước.
c. Ví dụ
>> Fs = 1000;
% Tần số lấy mẫu
T = 1/Fs;
% thời gian mẫu
L = 1000;
% Độ dài của tín hiệu
t = (0:L-1)*T;
% vector thời gian
% Tổng của một tần số hình sin 50Hz và một hình sin 120 Hz
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t);
y = x + 2*randn(size(t));
% cộng thêm nhiễu hình sin
plot(Fs*t(1:50),y(1:50))
title('Signal Corrupted with Zero-Mean Random Noise')
xlabel('time (milliseconds)')
>>
12
Rất k ó để xá định các thành phần tần số bằng cách nhìn vào các tín hiệu
b
đầu. Chuyể đổi sang miền tần số, đổi Fourier rời rạc của tín hiệu nhiễu y
được tìm thấy bằng cách lấy biế đổi Fourier nhanh (FFT):
>>
NFFT = 2^nextpow2(L); % Next power of 2 from length of y
Y = fft(y,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2);
% Vẽ phổ biê độ một mặt.
plot(f,2*abs(Y(1:NFFT/2)))
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
13
ylabel('|Y(f)|')
>>
1.2.2. Hàm Radon
a. Cú pháp
R = radon(I, theta)
[R,xp] = radon(...)
Mô tả:
R = radon (I, theta) trả về R d
đổi R của hình ả
ường độ I
độ góc
theta.
14
Các Radon chuyể đổi là sự phóng chiếu củ
một đườ
trò đị
độ hình ảnh dọc theo
ướng ở một ó độ cụ thể. Nếu theta là một v
một vector cột chứa Radon biế đổi
ma trậ tr
ườ
ướng, R là
t et độ. Nếu theta là một vector, R là một
đó mỗi cột là Radon biế đổi cho một trong các góc trong theta. Nếu
bạn bỏ qua theta, nó mặ định là 0: 179.
[R, xp] = radon (...) trả về một xp vector chứa xuyên tâm tọ độ tươ
ứng
với mỗi hàng của R.
Xuyên tâm tọ độ trả lại trong xp là những giá trị dọc theo x'trụ , đượ định
ướng ở độ t et
ược từ trục x. Nguồn gốc của cả hai trụ là điểm ảnh trung tâm
của hình ả , mà đượ đị
ĩ là
floor((size(I)+1)/2)
Ví dụ, trong một 20-by-30 hình ả , tru
tâm điểm ảnh (10,15).
b. Ví dụ
>> iptsetpref('ImshowAxesVisible','on')
I = zeros(100,100);
I(25:75, 25:75) = 1;
theta = 0:180;
[R,xp] = radon(I,theta);
imshow(R,[],'Xdata',theta,'Ydata',xp,...
'InitialMagnification','fit')
xlabel('\theta (degrees)')
ylabel('x''')
colormap(hot), colorbar
15
1.2.3. Hàm Phantom
a. Cú pháp
P = phantom(def, n)
P = phantom(E, n)
[P, E] = phantom(...)
b. Ví dụ
>> P = phantom('Modified Shepp-Logan',200);
imshow(P)
>>
16
1.3. Các họ hàm xử lý ảnh
1.3.1. Thay đổi kích thước ảnh
a. Cú pháp
B = imresize(A, scale)
B = imresize(A, [mrows ncols])
[Y newmap] = imresize(X, map, scale)
[...] = imresize(..., method)
[...] = imresize(..., parameter, value, ...)
b. Mô tả
B=imresize(A,m): Trả lại một ả
ọ ) sử dụ
p ươ
ó t ể là một ả
0 và 1, B sẽ
p áp ội suy mặ đị
ỉ số, ả
B lớ
A (kí
t ướ
ì
( e rest – neighbor interpolcation). A
đe trắ , RGB
ỏ ơ A. Nếu m lớ
ấp m lầ ả
ặ ả
ơ 1, B sẽ lớ
ị p â . Nếu m ằm iữ
ơ A.
17
B=imresize(A,m,method): Trả lại một ả
p ươ
p áp ội suy met
đượ sử dụ
ẳ
d. met
d là một
lớ
uỗi
ấp m lầ ả
ỉ r p ươ
p áp ội suy à
ạ : ‘ e rest’,’bili e r’,’bi ubi ’.
B=imresize(A, [mrows ncols],method): Trả lại một ả
đượ
ỉ r bởi ve t r [mr ws
ls]. Nếu kí
với ả
và , ả
. K i kí
ủ ả
sẽ bị biế dạ
và và p ươ
ră
ư . Kí
bộ lọ mặ đị
t ướ đượ
t ướ
sử dụ
là 11×11. T
ù
ỏ ơ kí
là ‘bili e r’
ót ể
t ướ
tỉ lệ
t ướ
ặ ‘bi ubi ’,
á để iảm iệ
ỉ r một t ứ tự k á
ấu trú :
B=imresize(…,method,n):
là một số
uyê
– x . Nếu =0, àm imresize bỏ qu bướ lọ . T
sử dụ
r
t ấp trướ k i tuyế tí
t ướ mặ đị
với kí
ỉr k
ủ ả
p áp ội suy đượ sử dụ
àm imresize áp đặt một bộ lọ t
tượ
A sử dụ
ỉ r kí
ũ
ót ể
t ướ
ủ bộ lọ
ỉ r bộ lọ riê
ú p áp:
B=imresize(…,method,h): Tr
đượ trả về bởi á
đó
là một bộ lọ FIR
àm ftr s2, fwi d1, fwi d2
i
iều ( ó t ể
ặ fs mp2 ).
c. Ví dụ
>> I = imread('circuit.tif');
J = imresize(I,1.25);
imshow(I)
figure, imshow(J)
>>
18
1.3.2. Quay ảnh
a. Cú pháp
B = imrotate(A,angle)
B = imrotate(A,angle,method)
B = imrotate(A,angle,method,bbox)
b. Mô tả
B=imrotate(A,angle): Qu y ả
iều kim đồ
ồ, sử dụ
p ươ
iều kim đồ
ồ ãy truyề
A một
ồ sử dụ
p ươ
le độ t e
p áp ội suy á pixel ầ
iá trị âm
t m số
B=imrotate(A,angle,method): Qu y ả
kim đồ
ó
ỉ r tr
B=imrotate(A,angle,method,bbox): Qu y ả
số bb x
ỉr
ộp biê
ủ ả
ượ
ất. Để qu y t e
le
A một ó
p áp ội suy đượ
iều
le độ t e
met
d.
A một ó
trả về. bb x là một
iều
le độ. T m
uỗi ó t ể
ậ
á
iá trị
sau:
‘ r p’: Ả
t ướ với ả
‘l
r B
ỉb
ồm p ầ tru
): Ả
r Bb
tâm ủ ả
đượ qu y và ó ù
kí
A
se’: ( Mặ đị
Hàm imr t te t iết lập iá trị 0
ồm t à bộ ả
á pixel
đượ qu y và lớ
ài biê
ủ ả
ơ ả
A.
ố .
19
c. Ví dụ
1.3.3. Xén ảnh
a. Cú pháp
I = imcrop
I2 = imcrop(I)
X2 = imcrop(X, map)
I = imcrop(h)
I2 = imcrop(I, rect)
X2 = imcrop(X, map, rect)
[...] = imcrop(x, y,...)
[I2 re t] = im r p(…)
[X,Y,I2,re t] = im r p(…)
b. Mô tả
Hàm imcrop xén một ảnh theo một hình chữ nhật được chỉ định.
I2=imcrop(I) ;
X2=imcrop(X,map);
20
- Xem thêm -