TRƯỜNG ĐẠI HỌC NÔNG NGHIỆP HÀ NỘIKHOA CÔNG NGHỆ THÔNG TIN BÀI TẬP LỚN QUẢN TRỊ MẠNG Đề tài: “Các phép biến đổi không gian ảnh Spatial Transformation gồm: Resizing an Image, Rotating an I
Trang 1TRƯỜNG ĐẠI HỌC NÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
BÀI TẬP LỚN QUẢN TRỊ MẠNG
Đề tài: “Các phép biến đổi không gian ảnh (Spatial Transformation) gồm:
Resizing an Image, Rotating an Image, Cropping an Image, một số phương pháp nội suy ảnh trong matlab, các hàm của Matlab (Image Processing Toolbox\Spatial
Transformations)”
Giảng viên hướng dẫn: TS Nguyễn Thị Thủy Nhóm sinh viên thực hiện:
1 Nguyễn Thị Diệu Lương
2 Nguyễn Thị Nha Trang
3 Lê Thị Thanh Vân
4 Nguyễn Thùy Vân
Lớp: Tin học B – K52
Trang 2Hà Nội, 2011
MỤC LỤC
I Tổng quan về phép biến đổi không gian ảnh(spatial transformation)
1
1 Khái niệm phép biến đổi không gian ảnh(ST) 2
2 Chức năng của phép biến đổi không gian ảnh 3
II Các phép biến đổi không gian ảnh 4
1 Chỉnh kích cỡ ảnh(resizing an image) 6
2 Quay ảnh(rotating an image) 6
3 Cắt ảnh(cropping an image) 6
4 Một số phương pháp nội suy ảnh và hàm của ST trong matlab 6
4.1 Một số phương pháp nội suy ảnh của ST trong matlab ………1 4.2 Một số hàm của ST trong matlab 1
III Demo 1 TÀI LIỆU THAM KHẢO 1
Trang 3I Tổng quan về phép biến đổi không gian ảnh(spatial transformation)
1 Khái niệm phép biến đổi không gian ảnh(ST)
Phép biến đổi hình học(geometric transformation, geometric spatial
transformation, spatial transformation) là phép biến đổi dùng để thay
đổi mối quan hệ không gian giữa các pixel(điểm ảnh) trong ảnh Nó được thực hiện qua hai bước: dùng phép chuyển đổi không gian theo
tọa độ(spatial transformation of coordinates), phép toán nội suy cường độ(intensity interpolation, grey-level interpolation)
Phép toán nội suy cường độ(intensity interpolation) là phép toán
thực hiện gán giá trị mức xám cho điểm ảnh được chuyển đổi Trong khi đó, phép biến đổi không gian theo tọa độ là một phép biến đổi hình học của hệ tọa độ ảnh
Bản chất của phép biến đổi không gian phồi hợp là ánh xạ vị trí điểm ảnh của ảnh gốc tới vị trí mới ở ảnh đầu ra Giả sử một điểm ảnh
ở vị trí (x,y) qua phép biến đổi không gian T có vị trí mới là (x’,y’),
trong đó x’ = T x (x,y) : y’=T y (x,y).
2 Chức năng của phép biến đổi không gian ảnh
Phép biến đổi không gian thực hiện các chức năng sau:
-canh chỉnh những ảnh được chụp ở các thời điểm khác nhau hoặc với các cảm biến khác nhau
-sửa ảnh cho sự biến dạng của ống kính
-sửa sự tác động hướng camera
-kỹ xảo hình ảnh hoặc các hiệu ứng đặc biệt khác
II Các phép biến đổi không gian ảnh
Trang 4Phép biến đổi không gian theo tọa độ có thể chia tỉ lệ, quay, dịch chuyển hoặc cắt một tập tọa độ các điểm ảnh, phụ thuộc vào giá trị được chọn cho các phần tử của ma trận F nào đó
1 Chỉnh kích cỡ ảnh(resizing an image)
Xét một điểm ảnh có tọa độ(x1,x2,x3) trong không gian 3 chiều
Phép chỉnh kích cỡ ảnh được biểu diễn dưới đây biến đổi tọa độ điểm ảnh ban đầu thành tọa độ(y1,y2,y3):
2 Quay ảnh(rotating an image)
Xét một điểm có tọa độ(x1,x2) trong không gian hai chiều qua phép quay theo góc Ɵ (radian) quanh gốc Ođược tọa độ mới(y1,y2) Phép quay
đó được thể hiện như sau:
y1 = cos(θ)x1 + sin(θ)x2
y2 = −sin(θ)x1 + cos(θ)x2
Trường hợp trong không gian 3 chiều, phép quay của những mặt phẳng của nó thông thường được mô tả quay theo các trục tương ứng Phép quay 1 góc q1 theo trục x là:
Tương tự, phép quay theo trục y và z lần lượt là:
và
Trang 53 Cắt ảnh(cropping an image)
Phép cắt ảnh được biểu diễn bởi ma trận sau:
4 Thuật toán và hàm của phép biến đổi không gian trong matlab
Công cụ matlab(Image Processing Toolbox) bao gồm các hàm thực hiện một số phép chuyển đổi không gian đặc biệt như chỉnh kích cỡ ảnh, quay ảnh…
4.1 Một số phương pháp nội suy ảnh của phép biến đổi
không gian trong matlab
Resizing an image
Bước 1: đọc ma trận ảnh, dùng hàm imread Bước 2: chỉnh sửa kích thước ảnh, dùng hàm resize Bước 3: hiện kết quả, dùng hàm imshow
Rotating an image
Bước 1: đọc ma trận ảnh, dùng hàm imread Bước 2: quay ảnh, dùng hàm imrotate Bước 3: hiện kết quả, dùng hàm imshow
Cropping an image
Bước 1: đọc ma trận ảnh, dùng hàm imread Bước 2: cắt ảnh, dùng hàm imcrop
Bước 3: hiện kết quả, dùng hàm imshow
4.2 Một số hàm của phép biến đổi không gian trong matlab
4.2.1 Các kiểu ảnh trong matlab
*Ảnh được định chỉ số (Indexed Images)
Một ảnh chỉ số bao gồm một ma trận dữ liệu X và ma trận bản
đồ màu map Ma trận dữ liệu có thể có kiểu thuộc lớp uint8, uint16 hoặc kiểu double Ma trận bản đồ màu là một mảng mx3 kiểu double
Trang 6bao gồm các giá trị dấu phẩy động nằm giữa 0 và 1 Mỗi hàng của bản
đồ chỉ ra các giá trị mà: red, green và blue của một màu đơn Một ảnh chỉ số sử dụng ánh xạ trực tiếp giữa giá trị của pixel ảnh tới giá trị cách sử dụng giá trị tương ứng của X ánh xạ tới một giá trị chỉ số của map Giá trị 1 chỉ ra hàng đầu tiên, giá trị 2 chỉ ra hàng thứ hai trong bản đồ màu …
Một bản đồ màu thường được chứa cùng với ảnh chỉ số và được
tự động nạp cùng với ảnh khi sử dụng hàm imread để đọc ảnh Tuy nhiên, ta không bị giới hạn khi sử dụng bản đồ màu mặc định, ta có thể sử dụng bất kì bản đồ màu nào
*Ảnh cường độ (Intensity Images)
Một ảnh cường độ là một ma trận dữ liệu ảnh I mà giá trị của
nó đại diện cho cường độ trong một số vùng nào đó của ảnh Matlab chứa một ảnh cường độ như một ma trận đơn, với mỗi phần tử của
ma trận tương ứng với một pixel của ảnh Ma trận có thể thuộc lớp double, uint8 hay uint16 Trong khi ảnh cường độ hiếm khi được lưu với bản đồ màu, Matlab sử dụng bản đồ màu để hiển thị chúng
Những phần tử trong ma trận cường độ đại diện cho các cường
độ khác nhau hoặc độ xám Những điểm có cường độ bằng 0 thường được đại diện bằng màu đen và cường độ 1,255 hoặc 65535 thường đại diện cho cường độ cao nhất hay màu trắng
*Ảnh nhị phân (Binary Images)
Trong một ảnh nhị phân, mỗi pixel chỉ có thể chứa một trong hai giá trị nhị phân 0 hoặc 1 Hai giá trị này tương ứng với bật hoặc tắt (on hoặc off) Một ảnh nhị phân được lưu trữ như một mảng logic của
0 và 1
* Ảnh RGB (RGB Images)
Một ảnh RGB - thường được gọi là true-color, được lưu trữ trong Matlab dưới dạng một mảng dữ liệu có kích thước 3 chiều mxnx3 định nghĩa các giá trị màu red, green và blue cho mỗi pixel riêng biệt Ảnh RGB không sử dụng palette Màu của mỗi pixel được quyết định bởi sự kết hợp giữa các giá trị R, G, B (Red, Green, Blue) được lưu trữ trong một mặt phẳng màu tại vị trí của pixel Định dạng
Trang 7file đồ hoạ lưu trữ ảnh RGB giống như một ảnh 24 bits trong đó R, G,
B chiếm tương ứng 8 bit một Điều này cho phép nhận được 16 triệu
Một mảng RGB có thể thuộc lớp double, uint8 hoặc uint16 Trong một mảng RGB thuộc lớp double, mỗi thành phần màu có giá trị giữa 0 và 1 Một pixel mà thành phần màu của nó là (0, 0, 0) được hiển thị với màu đen và một pixel mà thành phần màu là (1, 1, 1 ) được hiển thị với màu trắng Ba thành phần màu của mỗi pixel được lưu trữ cùng với chiều thứ 3 của mảng dữ liệu Chẳng hạn, giá trị màu
R, G, B của pixel (10, 5) được lưu trữ trong RGB(10, 5, 1), RGB(10,
5, 2) và RGB(10, 5, 3) tương ứng.
Để tính toán màu sắc của pixel tại hàng 2 và cột 3 chẳng hạn, ta nhìn vào bộ ba giá trị được lưu trữ trong (2, 3, 1:3) Giả sử (2, 3, 1) chứa giá trị 0.5176; (2, 3, 2) chứa giá trị 0.1608 và (2, 3, 3) chứa giá trị 0.0627 thì màu sắc của pixel tại (2, 3) sẽ là (0.5176, 0.1608, 0.0627)
4.2.2 Các hàm chuyển đổi không gian trong matlab
a Hàm imresize
Để điều chỉnh kích cỡ ảnh, ta dùng hàm imresize với các thông số đi
kèm Sử dụng hàm này ta có thể xác định kích cỡ của ảnh đầu ra, phương pháp nội suy được sử dụng và bộ lọc dùng để chặn răng cưa
Cú pháp của hàm imresize được biểu diễn theo nhiều cách như sau:
B = imresize(A,m)
B = imresize(A,m,method)
B = imresize(A,[mrows ncols],method)
B = imresize( ,method,n)
B = imresize( ,method,h)
Trong đó: B = imresize(A,m) trả về một ảnh B có kích cỡ bằng m lần
kích cỡ của A Ảnh A có thể là ảnh đa mức xám, RGB hay ảnh nhị
Trang 8phân Nếu m nằm trong khoảng (0,1) thì B nhỏ hơn A Ngược lại, B lớn hơn A
B = imresize(A,m,method) trả về một ảnh có kích cỡ gấp m lần kích cỡ
của ảnh A, dùng phương pháp nội suy được chỉ ra bởi tham số
method Tham số này là một xâu có thể có một trong các giá trị dưới
đây
Value description
'nearest' Nearest-neighbor interpolation (the default)
'bilinear' Bilinear interpolation
'bicubic' Bicubic interpolation
Bảng 4.2a
B = imresize(A,[mrows ncols],method) trả về một ảnh có kích cỡ
mrows x ncols Nếu kích cỡ của ảnh đầu ra có tỉ lệ không bằng nhau thì ảnh sẽ bị biến dạng Cụ thể, khi kích cỡ ảnh đầu ra nhỏ hơn kích cỡ
ảnh đầu vào và method là 'bilinear' hoặc 'bicubic' thì imresize áp dụng
bộ lọc thông thấp trước khi phép nội suy làm giảm lượng răng cưa
Kích cỡ mặc định của bộ lọc là 11x11.
Ta có thể chỉ ra thứ tự khác nhau cho bộ lọc mặc định dùng hàm sau:
B = imresize( ,method,n) với n là số nguyên chỉ ra kích cỡ bộ lọc.
Nếu n=0 thì hàm imresize bỏ qua bước lọc.
Ngoài ra ta có thể dùng hàm imresize với bộ lọc tùy chọn
B = imresize( ,method,h)
với h là bộ lọc FIR hai chiều(ftrans2, fwind1, fwind2, fsamp)
-xác định kích cỡ của ảnh đầu ra: theo 2 cách
+xác định nhân tố phóng đại(magnification factor)
Để phóng to ảnh, ta cho nhân tố phóng đại lớn hơn 1 Ngược lại, nhân tố phóng đại trong khoảng (0,1) ta được ảnh thu nhỏ Ví dụ:
I = imread('circuit.tif');
Trang 9J = imresize(I,1.25);
imshow(I) figure, imshow(J)
+ xác định chiều của ma trận ảnh đầu ra
Ta có thể xác định kích cỡ của ảnh đầu ra bằng cách truyền một vector chứa số hàng, số cột của ảnh đầu ra Lệnh sau đây tạo một ảnh đầu
ra Y gồm có 100 hàng, 150 cột:
Y = imresize(X,[100 150])
-Xác định phương pháp nội suy
Mặc định, hàm imresize sử dụng phương pháp nội suy hàm xóm gần nhất(nearest-neighbor interpolation) nhằm xác định giá trị của các pixel
trong ảnh đầu ra Tuy nhiên, ta có thể thay phương pháp trên bằng những phương pháp nội suy khác trong bảng 4.2a
Trong ví dụ này, hàm imresize sử dụng phương pháp nội suy Bilinear:
Y = imresize(X,[100 150],'bilinear')
Trang 10-dùng bộ lọc để ngăn chặn răng cưa
Việc giảm kích cỡ ảnh có thể xuất hiện các hiện vật trong ảnh đầu ra như các răng cưa, vì thông tin luôn bị mất khi ta giảm kích cỡ ảnh Răng cưa xuất hiện như các mẫu gợn trong ảnh đầu ra
b Hàm imrotate
Hàm imrotate dùng để quay ảnh, có các cách dùng sau đây:
B = imrotate(A,angle)
B = imrotate(A,angle,method)
B = imrotate(A,angle,method,bbox)
-Trong đó:
B = imrotate(A,angle) quay ảnh A một góc angle ngược chiều kim đồng hồ, dùng phép nội suy ‘nearest’.
B = imrotate(A,angle,method) quay ảnh A một góc ngược chiều kim
đồng hồ và có dùng phép nội suy được xác định tùy ý thông qua thông
số method.
Value description
'nearest' Nearest-neighbor interpolation (the default)
'bilinear' Bilinear interpolation
'bicubic' Bicubic interpolation
Bảng 4.2b
B = imrotate(A,angle,method,bbox) quay ảnh A theo góc angle Thông số bbox xác định ranh giới của ảnh đầu ra, có giá trị mặc định
‘loose’, nhận một trong những giá trị sau đây:
Value description
'crop' B chỉ gồm phần trung tâm của ảnh được
quay và có cùng kích cỡ với A 'loose' B gồm toàn bộ ảnh được quay và lớn hơn A
Hàm imrotate cho giá trị các điểm ảnh bên
ngoài A bằng 0 Bảng 4.2c
Ví dụ: quay ảnh một góc 350 có dùng phép nội suybilinear
I = imread('circuit.tif');
J = imrotate(I,35,'bilinear');
imshow(I)
Trang 11figure, imshow(J)
c Hàm imcrop
Hàm imcrop dùng để cắt ảnh Nó có các cú pháp sau đây:
I2 = imcrop(I)
X2 = imcrop(X,map)
RGB2 = imcrop(RGB)
I2 = imcrop(I,rect)
X2 = imcrop(X,map,rect)
RGB2 = imcrop(RGB,rect)
[ ] = imcrop(x,y, )
[A,rect] = imcrop( )
[x,y,A,rect] = imcrop( )
Trong đó:
Imcrop cắt ảnh thành một khung chữ nhật có kích thước tùy ý Trong các cú pháp dưới đây, hàm này biểu diễn ảnh đầu vào và đợi cho đến khi ta dùng chuột chỉ ra một khung chữ nhật có kích thước cụ thể
I2 = imcrop(I)
Trang 12X2 = imcrop(X,map)
RGB2 = imcrop(RGB)
Nếu ta bỏ các thông số đầu vào thì hàm imcrop sẽ thực hiện trên ảnh theo các trục tọa độ hiện thời
Ngoài ra, ta cũng có thể chỉ ra khung cắt hình chữ nhật một cách gián tiếp bằng cú pháp
I2 = imcrop(I,rect)
X2 = imcrop(X,map,rect)
RGB2 = imcrop(RGB,rect)
rect là một vector có 4 phần tử [xmin ymin width height] dùng để xác
định vị trí của khung
Muốn thiết lập lại hệ tọa độ(mặc định hệ gồm 2 phần tử) cho ảnh đầu vào ta dùng cú pháp
[ ] = imcrop(x,y, )
Nếu muốn cung cấp thêm thông số cho ảnh đầu ra thì ta có cú pháp sau:
[A,rect] = imcrop( )
[x,y,A,rect] = imcrop( )
với A là ảnh đầu ra;
x, y là giá trị trên các trục hoành, trục tung của hệ tọa độ của ảnh
đầu vào
Ví dụ:
I = imread('circuit.tif');
I2 = imcrop(I,[75 68 130 112]);
imview(I), imview(I2)
Trang 13d Hàm imtransform
Hàm imtransform áp dụng cho phép chuyển đổi không gian trong không gian hai chiều Nó có cú pháp như sau:
B = imtransform(A,TFORM)
B = imtransform(A,TFORM,INTERP)
[B,XDATA,YDATA] = imtransform( )
[B,XDATA,YDATA] = imtransform( ,param1,val1,param2,val2, ) Trong đó:
B = imtransform(A,TFORM) chuyển đổi ảnh A theo phép chuyển đổi tùy chọn theo thông số TFORM, nhận giá trị maketform hoặc
cp2tform Nếu ndims(A) > 2, ví dụ như ảnh RGB, thì phép chuyển đổi trên sẽ tự động được áp dụng cho các mặt phẳng với số chiều lớn hơn
B = imtransform(A,TFORM,INTERP) xác định phép nội suy sẽ được
sử dụng INTERP( được mặc định là 'bilinear' ) nhận một trong các giá trị dưới đây:
Value description
'bicubic' Bicubic interpolation
'bilinear' Bilinear interpolation(the default)
'nearest' Nearest-neighbor interpolation
[B,XDATA,YDATA] = imtransform( ) trả về vị trí của ảnh đầu ra B trong không gian X-Y XDATA và YDATA là các vector có hai phần tử Các
Trang 14phần tử của XDATA chỉ ra tọa độ x của cột đầu tiên và cột cuối cùng của ảnh B Các phần tử của YDATA chỉ ra tọa độ y của dòng đầu tiên và cột cuối cùng của ảnh B
[B,XDATA,YDATA] = imtransform( ,param1,val1,param2,val2, ) xác định các thông số điều khiển các khía cạnh khác của phép chuyển đổi Bảng dưới đây liệt kê tất cả các thông số của phép chuyển đổi
Parameter Description
'UData'
'VData'
Hai thông số này là các vector thực có hai phần tử 'UData' và 'VData' xác định vị trí của ảnh A trong không gian U-V Hai phần tử của 'UData' đưa ra tọa độ u(hoành độ) của cột đầu tiên và cột cuối cùng của A Hai phần tử của 'VData' đưa ra tọa độ u(hoành độ) của hàng đầu tiên và hàng cuối cùng của A
Giá trị mặc định của 'UData' và 'VData' là [1 size(A,2)] và [1 size(A,1)]
'XData'
'YData'
Hai thông số này là các vector thực có hai phần tử 'XData' và 'YData' xác định vị trí của ảnh đầu ra B trong không gian X-Y Hai phần tử của 'XData' đưa ra tọa độ x(hoành độ) của cột đầu tiên và cột cuối cùng của A Hai phần tử của 'YData' đưa ra tọa
độ y(hoành độ) của hàng đầu tiên và hàng cuối cùng của A
Nếu 'XData' and 'YData' không được chỉ định thì imtransform ước lượng các giá trị cho chúng với mặc định chứa toàn bộ ảnh đầu ra
'XYScale' Một vector gồm một hoặc hai phần tử Phần tử đầu tiên của
'XYScale' chỉ ra độ rộng của mỗi pixel đầu ra trong không gian X-Y Phần tử thứ hai(nếu có) chỉ ra độ cao của pixel đầu ra Nếu 'XYScale' chỉ có một phần tử thì độ rộng và độ cao của pixel nhận cùng một giá trị
Nếu 'XYScale' không được chỉ ra trong khi 'Size' lại có thì 'XYScale' được tính từ 'Size', 'XData', và 'YData'
Nếu 'XYScale' và 'Size' đều không được chỉ ra thì tỉ lệ của các pixel đầu vào được dùng cho 'XYScale'
'Size' Một vector của hai phần tử nguyên 'Size' xác định số dòng và cột
của ảnh đầu ra B Vì số chiều cao hơn thì kích cỡ của B được dùng trực tiếp từ kích cỡ của A Mặt khác, size(B,k) =size(A,k)