VI -Biến đổi không gian ảnh
3. Thay đổi kích thước ảnh
- Để thay đổi kích thước của một ảnh , sử dụng hàm imresize . Sử dụng hàm này ta có thể :
+ Chỉ ra kích thước của ảnh kết quả
+ Chỉ ra phương pháp nội suy được sử dụng
+ Chỉ ra bộ lọc được sử dụng để ngăn ngừa hiện tượng răng cưa
Chỉ ra kích thước cho ảnh kết quả
- Sử dụng hàm imresize , ta chó thể chỉ ra kích thước của ảnh kết quả theo hai cách : + Bằng cách chỉ ra hệ số phóng đại được sử dụng trên ảnh
Sử dụng hệ số phóng đại ảnh
- Để mở rộng một ảnh , chỉ ra hệ số phóng đại lớn hơn 1 . Để thu nhỏ một ảnh , chỉ ra hệ số phóng đại nằm giữa 0 và 1 . Chẳng hạn , lệnh sau tăng kích thước của ảnh I lên 1.25 lần : I = imread('circuit.tif'); J = imresize(I,1.25); imshow(I) figure, imshow(J) Chỉ định kích thước của ảnh ra
- Ta có thể chỉ ra kích thước của ảnh ra bằng cách truyền một véc tơ chứa số lượng hàng và cột của ảnh sau cùng . Những lệnh sau đây tạo một ảnh ra Y với 100 hàng và 150 cột . Y = imresize(X,[100 150])
Chú ý : Nếu kích thước được chỉ ra không có cùng tỉ lệ với ảnh vào , ảnh ra sẽ bị biến
dạng
- Theo mặc định , hàm imresize sử dụng phương pháp nội suy các pixel gần nhất ( nearest – neighbor interpolation ) để tính giá trị các pixel của ảnh ra . Tuy nhiên , ta có thể chỉ định các phương pháp nội suy khác .Bảng sau đây liệt kê các phương pháp nội suy được trợ giúp theo thứ tự của độ phức tạp .
Giá trị tham số Phương pháp nội suy
‘nearest’ Nội suy các phixel gần nhất ( mặc định ) ‘bilinear’ Nội suy song tuyến tính
‘biculic’ Nội suy song khối
Trong ví dụ sau , hàm imresize sử dụng phương pháp nội suy song tuyến tính : Y=imresize(X, [100 150],’bilinear’);
Sử dụng bộ lọc để ngăn chặn hiện tượng răng cưa
- Việc giảm kích thước ( hình học ) của một ảnh có thể gây ra những ảnh hưởng nhất định lên ảnh chẳng hạn như hiện tượng xuất hiện răng cưa tại biên của ảnh . Điều này là do thông tin luôn bị mất khi ta giảm kích thước một ảnh . Răng cưa xuất hiện như những gợn sóng trong ảnh sau cùng .
- Khi giảm kích thước của ảnh sử dụng nội suy song tuyến tính hoặc song khối , hàm imresize tự động áp đặt một bộ lọc thông thấp lên ảnh trước khi nội suy . Điều này để giảm ảnh hưởng của răng cưa trong ảnh ra . Ta có thể chỉ ra kích thước của bộ lọc này hoặc chỉ ra một bộ lọc khác thay thế .
Chú ý : Thậm chí đã sử dụng một bộ lọc thông thấp , chất lượng của ảnh vẫn bị ảnh
hưởng do thông tin luôn bị mất trong quá trình nội suy
- Hàm imresize không áp đặt một bộ lọc thông thấp lên ảnh nếu phương pháp nội suy các pixel gần nhất được sử dụng . Phương pháp nội suy này ban đầu được sử dụng với các ảnh chỉ số và bộ lọc thông thấp không thích hợp cho kiểu ảnh này .
- Ta cũng có thể chỉ ra một bộ lọc tự tạo thay cho các bộ lọc có sẵn .
Hàm imresize
Cú pháp của hàm này như sau : B = imresize(A,m)
B = imresize(A,m,method)
B = imresize(...,method,n) B = imresize(...,method,h)
Diễn giải
+ B=imresize(A,m) : Trả lại một ảnh B lớn gấp m lần ảnh A ( kích thước hình học ) sử dụng phương pháp nội suy mặc định ( nearest – neighbor interpolcation ) . A có thể là một ảnh chỉ số , ảnh đen trắng , RGB hoặc ảnh nhị phân . Nếu m nằm giữa 0 và 1 , B sẽ nhỏ hơn A . Nếu m lớn hơn 1 , B sẽ lớn hơn A .
+ B=imresize(A,m,method) : Trả lại một ảnh lớn gấp m lần ảnh A sử dụng phương pháp nội suy method . method là một chuỗi chỉ ra phương pháp nội suy nào được sử dụng chẳng hạn : ‘nearest’,’bilinear’,’bicubic’ .
+B=imresize(A, [mrows ncols],method) : Trả lại một ảnh với kích thước được chỉ ra bởi véc tơ [mrows ncols ] . Nếu kích thước được chỉ ra không cùng tỉ lệ với ảnh vào , ảnh sẽ bị biến dạng
Khi kích thước của ảnh ra nhỏ hơn kích thước của ảnh vào và phương pháp nội suy được sử dụng là ‘bilinear’ hoặc ‘bicubic’ , hàm imresize áp đặt một bộ lọc thông thấp trước khi tuyến tính hoá để giảm hiện tượng răng cưa . Kích thước mặc định là 11x11 .
Ta có thể chỉ ra một thứ tự khác cho bộ lọc mặc định sử dụng cấu trúc :
B=imresize(…,method,n) : n là một số nguyên chỉ ra kích thước của bộ lọc – nxn . Nếu n=0 , hàm imresize bỏ qua bước lọc . Ta cũng có thể chỉ ra bộ lọc riêng sử dụng cú pháp : B=imresize(…,method,h) : Trong đó h là một bộ lọc FIR hai chiều ( có thể được trả về bởi các hàm ftrans2, fwind1 , fwind2 hoặc fsamp2 ) .
4. Quay ảnh
- Để quay một ảnh , sử dụng hàm imrotate . Hàm này chấp nhận hai tham số chính : + Ảnh cần quay
+ Góc quay
-Góc quay tính theo độ . Nếu ta chỉ ra một giá trị dương , hàm imrotate quay ảnh theo chiều ngược chiều kim đồng hồ . Nếu chỉ ra giá trị âm , hàm quay ảnh theo chiều kim đồng hồ . Ví dụ sau quay một ảnh 35 độ theo chiều ngược chiều kim đồng hồ :
J=imrotate(I,35 ) ;
- Một số tham số tuỳ chọn ta có thể truyền vào cho hàm bao gồm : + Phương pháp nội suy được sử dụng
Chỉ định phương pháp nội suy được sử dụng
- Theo mặc định , hàm imrotate sử dụng phương pháp nội suy thứ nhất ( nearest-neighbor interpolation ) để tính giá trị các pixel trong ảnh ra . Tuy nhiên ,ta có thể chỉ ra các phương pháp nội suy khác như : ‘bilinear ‘,’bicubic’
Ví dụ sau quay một ảnh 35 độ ngược chiều kim đồng hồ sử dụng nội suy song tuyến tính : I = imread('circuit.tif'); J = imrotate(I,35,'bilinear'); imshow(I) figure, imshow(J) Chỉ định kích thước của ảnh ra
Theo mặc định , hàm imrotate tạo một ảnh ra đủ lớn để có thể bao gồm toàn bộ các pixel của ảnh gốc . Các pixel nằm ngoài biên của ảnh gốc được gán giá trị 0 như thể nền màu
đen trong ảnh ra . Nếu ta chỉ ra chuỗi ‘crop’ như một tham số , hàm imrotate sẽ xén ảnh ra tới kích thước như ảnh vào .
Hàm imrotate
Cú pháp của nó như sau : B = imrotate(A,angle)
B = imrotate(A,angle,method) B = imrotate(A,angle,method,bbox)
Diễn giải
+B=imrotate(A,angle) : Quay ảnh A một góc angle độ theo chiều ngược chiều kim đồng hồ , sử dụng phương pháp nội suy các pixel gần nhất . Để quay theo chiều kim đồng hồ hãy truyền giá trị âm cho tham số angle
+ B=imrotate(A,angle,method) : Quay ảnh A một góc angle độ theo chiều kim đồng hồ sử dụng phương pháp nội suy được chỉ ra trong method .
+ B=imrotate(A,angle,method,bbox) : Quay ảnh A một góc angle độ . Tham số bbox chỉ ra hộp biên của ảnh trả về . bbox là một chuỗi có thể nhận các giá trị sau :
‘crop’ : Ảnh ra B chỉ bao gồm phần trung tâm của ảnh được quay và có cùng kích thước
với ảnh A
‘loose’ : ( Mặc định ) : Ảnh ra B bao gồm toàn bộ ảnh được quay và lớn hơn ảnh A .
imrotate thiết lập giá trị 0 cho các pixel ngoài biên của ảnh gốc .
Ví dụ
- Ví dụ này đọc một ảnh quang phổ ánh sáng mặt trời được lưu trong định dạng FITS và quay nó và căn nó theo chiều ngang .
I = fitsread('solarspectra.fts'); I = mat2gray(I);
J = imrotate(I,-1,'bilinear','crop'); imshow(I)