Thứ Sáu, 6 tháng 6, 2014

Một số hàm xử lý ảnh trong matlab

Các kiểu ảnh trong Matlab

a) Ả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 bao 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ị trong bản đồ màu. Màu sắc của mỗi pixel ảnh được tính toán bằng 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.
b) Ả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.
c) Ả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.
d) Ả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 file đồ 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àu khác nhau.  
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).

 Các hàm xử lý ảnh cơ bản trong Matlab

a) Đọc và ghi dữ liệu ảnh
  • Đọc một ảnh đồ hoạ
-  Hàm imread đọc một ảnh từ bất kì định dạng nào được trợ giúp trong bất kì chiều sâu bit nào được trợ giúp. Hầu hết các file ảnh sử dụng 8 bit để chứa giá trị của pixel. Khi chúng được đọc vào bộ nhớ, Matlab chứa chúng dưới dạng uint8. Với các file trợ giúp 16 bít dữ liệu, PNG và TIFF, Matlab chứa chúng dưới dạng uint16. Chú ý:  Với  ảnh chỉ số,  imread luôn luôn  đọc bản  đồ màu vào trong một chuỗi thuộc lớp double, thậm chí mảng ảnh tự nó thuộc lớp uint8 hay uint16 
-  Chẳng hạn, đoạn mã sau sẽ đọc một ảnh RGB vào không gian làm việc của Matlab lưu trong biến RGB.
 RGB=imread(‘football.jpg’); 
Trong ví dụ này, imread sẽ nhận ra định dạng file để sử dụng từ tên file. Ta cũng có thể chỉ ra  định dạng file như một tham số trong hàm  imread. Matlab trợ giúp rất nhiều  định dạng  đồ hoạ thông dụng chẳng hạn: BMP, GIF, JPEG, PNG, TIFF … Để biết thêm các kiểu gọi hàm và tham số truyền vào, xem trợ giúp online của Matlab.
  • Đọc nhiều ảnh từ một file đồ hoạ
-  Matlab trợ giúp một số định dạng file đồ hoạ chẳng hạn như: HDF và TIFF, chúng chứa nhiều  ảnh. Theo mặc  định, imread chỉ trợ giúp ảnh đầu tiên trong file. Để nhập thêm các ảnh từ file, sử dụng cú pháp được trợ giúp bởi định dạng file. Chẳng hạn, khi được sử dụng với TIFF, ta có thể sử dụng một giá trị chỉ số với imread để chỉ ra ảnh mà ta muốn nhập vào.  
Ví dụ sau đây đọc một chuỗi 27 ảnh từ một file TIFF và lưu những ảnh này trong một mảng 4 chiều. Ta có thể sử dụng hàm iminfo để xem bao nhiêu ảnh đã được lưu trữ trong file:
 mri = uint8(zeros(128,128,1,27)); % preallocate 4-D array 
for frame=1:27  
[mri(:,:,:,frame),map] = imread('mri.tif',frame); 
End 
-  Khi file chứa nhiều  ảnh theo một số kiểu nhất  định chẳng hạn theo thứ tự thời gian, ta có thể lưu ảnh trong Matlab dưới dạng mảng 4 chiều. Tất cả các ảnh phải có cùng kích thước.
  • Ghi một ảnh đồ hoạ
-  Hàm  imwrite sẽ ghi một  ảnh tới một file  đồ hoạ dưới một trong các  định dạng được trợ giúp. Cấu trúc cơ bản nhất của imwrite sẽ yêu cầu một biến ảnh và tên file. Nếu ta gộp một phần mở rộng trong tên file, Matlab sẽ nhận ra định dạng mong muốn từ nó.  
Ví dụ sau tải một ảnh chỉ số X từ một file Map với bản đồ màu kết hợp với nó map sau đó ghi ảnh xuống một file bitmap.
 load clown  
whos  
Name          Size         Bytes  Class  
X           200x320       512000  double array  
caption       2x1              4  char array  
map          81x3           1944  double array 
Grand total is 64245 elements using 513948 bytes 
imwrite(X,map,'clown.bmp')
  • Chỉ ra định dạng phụ - Tham số đặc biệt
-  Khi sử dụng imwrite với một số định dạng đồ hoạ, ta có thể chỉ ra các tham số phụ. Chẳng hạn, với định dạng PNG  ta có thể chỉ ra độ sâu bit như một tham số phụ. Ví dụ sau sẽ chi một  ảnh cường  độ I với một file  ảnh 4 bit PNG.
 imwrite(I,'clown.png','BitDepth',4 ); 
-  Để biết thêm các cấu trúc khác của hàm xem phần trợ giúp trực tuyến của Matlab.
  • Đọc và ghi ảnh nhị phân theo định dạng 1 bit
-  Trong một số  định dạng file, một  ảnh nhị phân có thể  được lưu trong một định dạng 1 bit. Nếu định dạng file trợ giúp nó, Matlab ghi ảnh nhị phân như ảnh 1 bit theo mặc  định. Khi ta  đọc một  ảnh nhị phân với  định dạng 1 bit, Matlab đại diện nó trong không gian làm việc như một mảng lôgic. 
-  Ví dụ sau đọc một ảnh nhị phân và ghi nó dưới dạng file TIFF. Bởi vì định dạng TIFF trợ giúp ảnh 1 bit, file được ghi lên đĩa theo định dạng 1 bit:
BW = imread('text.png');  

imwrite(BW,'test.tif'); 
Để kiểm tra chiều sâu bit của file test.tif, gọi hàm iminfo và kiểm tra trường BitDepth của nó:
info = imfinfo('test.tif');info.BitDepth  
ans =1 
Chú ý: Khi ghi file nhị phân, Matlab thiết lập trường ColorType thành ‘grayscale’.
  • Xem lớp lưu trữ của file
-  Hàm imwrite sử dụng luật sau đây để quyết định lớp lưu trữ được sử dụng trong ảnh kết quả:
+ logical: Nếu định dạng ảnh ra (Output Image) được chỉ rõ là trợ giúp ảnh 1 bit, hàm imwrite tạo một file ảnh 1 bit. Nếu định dạng ảnh ra được chỉ rõ là không trợ giúp  ảnh 1 bit (như JPEG), hàm  imwrite chuyển  ảnh tới một  ảnh thuộc lớp uint8.
+ uint8: Nếu định dạng ảnh ra được chỉ rõ là trợ giúp ảnh 8 bit, hàm imwrite tạo một ảnh 8 bit
+ uint16: Nếu định dạng ảnh ra được chỉ rõ trợ giúp  ảnh 16 bit (PNG hoặc TIFF), hàm imwrite tạo một ảnh 16 bit.  Nếu định dạng ảnh ra không trợ giúp ảnh 16 bit, hàm chuyển đổi dữ liệu ảnh tới lớp uint8 và tạo một ảnh 8 bit.
+ double: Matlab chuyển dữ liệu ảnh tới dạng uint8 và tạo một ảnh 8 bit bởi vì hầu hết các file ảnh sử dụng định dạng 8 bit.
  • Truy vấn một file đồ hoạ
-  Hàm  imfinfo cho phép ta có thể nhận  được thông tin về một file  ảnh  được trợ giúp bởi toolbox. 
Cú pháp: imfinfo(filename,fmt) 
Các thông tin  được cung cấp bởi hàm  imfinfo  là: filename,  filemodedate, filesize, format, formatversion, width, height, bitdepth, colortype …  Thông tin mà ta nhận được phụ thuộc vào kiểu của file nhưng nó luôn bao gồm những thông tin sau:
  • Tên của file ảnh.
  • Định dạng file ảnh.
  • Số version của định dạng file.
  • Ngày sửa đổi file gần nhất.
  • Kích thước file tính theo byte.
  • Chiều rộng ảnh tính theo pixel.
  • Chiều cao ảnh tính theo pixel.
  • Số lượng bít trên một pixel.
  • Kiểu ảnh: RGB, chỉ số …
b) Hiển thị ảnh
  • Dùng hàm imview
-  Để hiển thị một ảnh sử dụng hàm imview, dùng hàm imview, chỉ rõ ảnh mà ta muốn hiển thị. Ta có thể sử dụng imview để hiển thị  một ảnh mà đã được nhập vào trong không gian làm việc của Matlab.
moonfig = imread('moon.tif'); 
imview(moonfig); 
Ta cũng có thể chỉ định tên của file ảnh như trong ví dụ sau:
imview('moon.tif'); 
-  File  ảnh phải có mặt trong thư mục hiện tại hoặc trong  đường dẫn của Matlab. Cấu trúc này có thể hữu ích cho việc quét qua nhiều ảnh. Tuy nhiên, lưu ý, khi sử dụng cấu trúc này, dữ liệu  ảnh không  được lưu trong không gian làm việc của Matlab.
-  Nếu ta gọi hàm imview mà không chỉ ra mất kì tham số nào, nó sẽ hiển thị một hộp chọn file cho phép ta chỉ ra tên file muốn hiển thị.
  • Xem nhiều ảnh
-  Nếu ta chỉ ra một file mà chứa nhiều ảnh, hàm imview chỉ hiển thị ảnh đầu tiên trong file đó. Để xem tất cả các ảnh trong file, sử dụng hàm imread để nhập mỗi  ảnh vào trong không gian làm việc của Matlab sau  đó gọi hàm imview nhiều lần để hiển thị mỗi ảnh riêng biệt.
  • Dùng hàm imshow
-  Để xem  ảnh, ta có thể sử dụng hàm  imshow thay cho  imview. Ta sử dụng imshow  để hiển thị một  ảnh  đã  được nhập vào trong không gian làm việc như ví dụ sau:
moon = imread('moon.tif');  

imshow(moon); 
Ta cũng có thể chỉ ra tên của file ảnh như một tham số truyền vào cho hàm như ví dụ sau: imshow('moon.tif');
Khi sử dụng cấu trúc này thì dữ liệu ảnh không được nhập vào trong không gian làm việc. Tuy nhiên, ta có thể mang ảnh vào trong không gian làm việc bằng cách sử dụng hàm  getimage. Hàm này sẽ nhận dữ liệu  ảnh từ handle của một đối tượng  ảnh hiện tại. Chẳng hạn: moon = getimage; Sẽ gán dữ liệu  ảnh từ moon.tif vào biến moon.
c) Các hàm chuyển đổi kiểu ảnh
-  Với các thao tác nhất định sẽ thật hữu ích khi có thể chuyển đổi ảnh từ dạng này sang dạng khác. Chẳng hạn, nếu ta muốn lọc một màu ảnh được lưu trữ dưới dạng  ảnh chỉ số  đầu tiên ta nên chuyển  đổi nó thành dạng  ảnh RGB. 
Khi ta áp dụng phép lọc tới ảnh RGB, Matlab sẽ lọc giá trị cường độ trong ảnh tương  ứng. Nếu ta cố gắng lọc  ảnh chỉ số, Matlab  đơn giản chỉ áp  đặt phép lọc tới ma trận ảnh chỉ số và kết quả sẽ không có ý nghĩa. 
Chú ý: Khi chuyển đổi một ảnh từ dạng này sang dạng khác, ảnh kết quả có thể khác ảnh ban đầu. Chẳng hạn, nếu ta chuyển đổi một ảnh màu chỉ số sang một ảnh cường độ, kết quả ta sẽ thu được một ảnh đen trắng.
-  Danh sách sau  đây sẽ liệt kê các hàm  được sử dụng trong việc chuyển  đổi kiểu ảnh:
  • dither:  Tạo một  ảnh nhị phân từ một  ảnh cường  độ  đen trắng bằng cách trộn, tạo một ảnh chỉ số từ một ảnh RGB bằng cách trộn (dither).
  • gray2id: Tạo một ảnh chỉ số từ một ảnh cường độ đen trắng.
  • grayslice:  Tạo một  ảnh chỉ số từ một  ảnh cường độ  đen trắng bằng cách đặt ngưỡng.
  • im2bw:  Tạo một  ảnh nhị phân từ một  ảnh cường độ,  ảnh chỉ số hay  ảnh RGB trên cơ sở của ngưỡng ánh sáng.
  • ind2gray: Tạo một ảnh cường độ đen trắng từ một ảnh chỉ số.
  • ind2rgb: Tạo một ảnh RGB từ một ảnh chỉ số.
  • mat2gray: Tạo một ảnh cường độ đen trắng từ dữ liệu trong một ma trận bằng cách lấy tỉ lệ giữ liệu.
  • rgb2gray:  Tạo một ảnh cường độ đen trắng từ một ảnh RGB.
  • rgb2ind: Tạo một ảnh chỉ số từ một ảnh RGB.
-  Ta cũng có thể thực hiện các phép chuyển đổi kiểu chỉ sử dụng cú pháp của Matlab. Chẳng hạn, ta có thể chuyển  đổi một  ảnh cường độ sang  ảnh RGB bằng cách  ghép nối 3 phần copy của ma trận ảnh gốc giữa 3 chiều:
RGB=cat(3,I,I,I ); 
-  Ảnh RGB thu được có các ma trận đồng nhất cho các mặt phẳng R, G, B vì vậy ảnh hiển thị giống như bóng xám. 
-  Thêm vào những công cụ chuyển  đổi chuẩn  đã nói  ở trên, cũng có một số hàm mà trả lại kiểu  ảnh khác như một phần trong thao tác mà chúng thực hiện.
  • Chuyển đổi không gian màu
-  Toolbox xử lý ảnh biểu diễn màu sắc như các giá trị RGB ( trực tiếp trong ảnh RGB hoặc gián tiếp trong ảnh chỉ số ). Tuy nhiên, có các phương pháp khác cho việc biểu diễn màu sắc. Chẳng hạn, một màu có thể được đại diện bởi các giá trị hue, saturation và các giá trị thành phần (HSV). Các phương pháp khác cho việc biểu diễn màu được gọi là không gian màu. 
-  Toolbox cung cấp một tập các thủ tục  để chuyển  đổi giữa các không gian màu. Các hàm xử lý ảnh tự chúng coi dữ liệu màu sắc dưới dạng RGB tuy nhiên, ta có thể xử lý một  ảnh mà sử dụng các không gian màu khác nhau bằng cách chuyển đổi nó sang RGB sau đó chuyển đổi ảnh đã được xử lý trở lại không gian màu ban đầu.
d) Chuyển đổi định dạng các file ảnh 
-  Để thay đổi định dạng đồ hoạ của một ảnh, sử dụng hàm imread để đọc một ảnh và sau đó lưu nó với hàm imwrite đồng thời chỉ ra định dạng tương ứng. 
-  Để minh hoạ, ví dụ sau đây sử dụng hàm imread để đọc một file BMP vào không gian làm việc.Sau đó, hàm imwrite lưu ảnh này dưới định dạng PNG
bitmap = imread('mybitmap.bmp','bmp');  
imwrite(bitmap,'mybitmap.png','png'); 
e) Số học ảnh
-  Số học  ảnh sự  ứng dụng của các phép toán số học chuẩn như: cộng, trừ, nhân, chia lên ảnh. Số học ảnh được sử dụng nhiều trong xử lý ảnh trong cả các bước ban đầu lẫn các thao tác phức tạp hơn. Chẳng hạn, trừ ảnh có thể được sử dụng để phát hiện sự khác nhau giữa hai hoặc nhiều  ảnh của cùng một cảnh hoặc một vật. 
-  Ta có thể thực hiện số học  ảnh sử dụng các toán tử số học của Matlab. 
Toolbox xử lý ảnh bao gồm một tập hợp các hàm ứng dụng các phép toán số học trên tất cả các con số không lấp đầy. Hàm số học của toolbox chấp nhận bất kì kiểu dữ liệu số nào bao gồm uint8, uint16 hay double và trả lại ảnh kết quả trong cùng định dạng. Các hàm thực hiện các phép toán với độ chính xác kép trên từng phần tử nhưng không chuyển đổi ảnh tới giá trị chính xác kép trong không gian làm việc của Matlab. Sự tràn số được điều khiển tự động. Hàm sẽ cắt bỏ giá trị trả về để vừa với kiểu dữ liệu.
  • Luật cắt bỏ trong số học ảnh
-  Kết quả của số học nguyên có thể dễ dàng tràn số dùng cho lưu trữ. Chẳng hạn, giá trị cực đại ta có thể lưu trữ trong uint8 là 255. Các phép toán số học có thể trả về giá trị phân số - không được biểu diễn bởi một chuỗi số nguyên. 
-  Các hàm số học ảnh sử dụng những luật này cho số học nguyên:
+ Giá trị vượt quá khoảng của kiểu số nguyên bị cắt bỏ tới khoảng đó  
+ Giá trị phân số được làm tròn Chẳng hạn, nếu dữ liệu có kiểu uint8, kết quả trả về nếu lớn hơn 255 ( bao gồm Inf ) thì được gán là 255.
  • Lời gọi lồng nhau tới hàm số học ảnh
-  Ta có thể sử dụng các hàm số học  ảnh kết hợp  để thực hiện một chuỗi các phép toán. Chẳng hạn để tính giá trị trung bình của hai ảnh: 
C=(A+B) /2 
Ta có thể nhập vào như sau:
I = imread('rice.png');  
I2 = imread('cameraman.tif');  
K = imdivide(imadd(I,I2), 2); % not recommended 
-  Khi được sử dụng với kiểu uint8 hay uint16, mỗi hàm số học cắt kết quả của nó trước khi truyền nó cho hàm thiếp theo. Sự cắt bỏ này có thể giảm đáng kể lượng thông tin trong ảnh cuối cùng. Một cách làm tốt hơn để thực hiện một chuỗi các tính toán là sử dụng hàm imlincomb. Hàm này thi hành tất cả các phép toán số học trong sự kết hợp tuyến tính của độ chính xác kép và chỉ cắt bỏ kết quả cuối cùng:
K = imlincomb(.5,I,.5,I2); % recommended

 Biến đổi không gian ảnh
Biến đổi không gian ảnh là thực hiện ánh xạ giữa vị trí các pixel trong ảnh vào với các pixel trong ảnh ra.
a) Bảng thuật ngữ
Aliasing : Răng cưa - xuất hiện khi giảm kích thước ảnh. Khi kích thước của một ảnh bị giảm, các pixel gốc bị lấy mẫu giảm để tạo ra ít pixel hơn. Aliasing xảy ra như kết quả của việc giảm kích thước ảnh thường xuất hiện dưới dạng bậc thang (  đặc biệt trong các ảnh có độ tương phản cao )
Antialiasing : Các biện pháp chống răng cưa cho ảnh
Bicubic interpolation : Giá  trị của các pixel ra  được tính toán từ giá trị trung bình của 4x4 pixel lân cận Bilinear interpolation : Gía trị của pixel ra  được tính toán từ giá trị trung bình của 2x2 pixel lân cận
Geometric operation : Một thao tác sửa đổi quan hệ hình học gữa các pixel trong một  ảnh. Chẳng hạn thay đổi kích thước ảnh, quay ảnh và xén ảnh
Interpolation : Quá trình được sử dụng để ước lượng giá trị ảnh ở một vị trí giữa các pixel
Nearest-neighbor interpolation : Các giá trị pixel ra  được gán giá trị của pixel nằm trong một vùng gần pixel đó.
b) Nội suy
Nội suy là quá trình sử dụng để ước lượng một giá trị ảnh ở một vị trí giữa các pixel. Chẳng hạn, nếu ta thay  đổi kích thước một  ảnh, nó sẽ chứa nhiều pixel hơn ảnh gốc, toolbox sử dụng sự nội suy để tính giá trị cho các pixel thêm vào. Hàm imresize và  imrotate sử dụng nội suy hai chiều  để thực hiện thao tác của mình. Hàm improfile cũng sử dụng sự nội suy hoá.
  • Các phương pháp nội suy
- Toolbox sử lý ảnh cung cấp 3 cách nội suy hoá 
+ Nội suy các pixel gần nhất ( nearest –neighbor interpolation )  
+ Nội suy song tuyến tính ( Bilinear interpolation ) 
+ Nội suy song khối ( Bicubic interpolation ) 
Các phương pháp nội suy làm việc theo một cách giống nhau. Trong mỗi trường hợp, để tính giá trị của một pixel đã được nội suy, chúng tìm điểm trong ảnh ra mà pixel nằm tại đó. Sau đó, chúng gán một giá trị tới các pixel ra bằng cách tính toán giá trị trung bình có trọng số của một số pixel lân cận. Trọng số dựa trên cơ sở khoảng cách tới điểm đang xét. 
- Các phương pháp này khác nhau ở tập các pixel mà chúng xem xét:
+ Với nội suy các pixel gần nhất: pixel ra  được gán giá trị của các pixel  ở gần nó nhất. Các pixel khác không được xem xét.
+ Nội suy song tuyến tính, giá trị của pixel ra là giá trị trung bình theo trọng số của 2x2 pixel lân cận.
+ Nội suy song khối: giá trị của pixel ra là trung bình có trọng số của 4x4 pixel lân cận. 
Số lượng các pixel  được xem xét  ảnh hưởng  đến  độ phức tạp tính toán. Vì vậy, phương pháp song tuyến tính mất nhiều thời gian hơn phương pháp thứ nhất và 
phương pháp song khối mất nhiều thời gian hơn song tuyến tính. Tuy nhiên, số lượng pixel lớn hơn, độ chính xác sẽ tốt hơn.
  • Kiểu ảnh
- Các hàm sử dụng tuyến tính yêu cầu một tham số chỉ ra phương pháp nội suy. Với hầu hết các hàm, phương pháp mặc định được sử dụng là nearest-neighbor interpolation. Phương pháp này tạo ra một kết quả có thể chấp nhận được cho hầu hết các ảnh và là phương pháp duy nhất thích hợp với ảnh chỉ số. Với ảnh cường độ hay RGB, tuy nhiên  ta thường chỉ ra kiểu song tuyến tính hoặc song khối bởi vì những phương pháp này cho kết quả tốt hơn  
Với  ảnh RGB, nội suy thường  được thực hiện trên mặt phẳng R,B,G một cách riêng biệt  
Với ảnh nhị phân, nội suy gây ra những  ảnh hưởng mà ta có thể nhận thấy được. Nếu sử dụng nội suy song tuyến tính hoặc song khối, giá trị tính toán được cho pixel trong ảnh ra sẽ không hoàn toàn là 0 hoặc 1. Ảnh hưởng trên ảnh kết quả phụ thuộc vào lớp của ảnh vào:
+ Nếu lớp ảnh vào là double, ảnh ra là một ảnh đen trắng thuộc lớp double. Ảnh ra không là ảnh nhị phân bởi vì nó bao gồm các giá trị khác 0 và 1.
+ Nếu ảnh vào là uint8, ảnh ra là một ảnh nhị phân thuộc lớp uint8. Giá trị của các pixel được nội suy được làm tròn thành 0 hoặc 1. Vì vậy , ảnh ra thuộc lớp uint8.
Nếu sử dụng phương pháp nearest-neighbor interpolation, ảnh ra luôn là ảnh nhị phân bởi vì những giá trị của pixel được nội suy được lấy trực tiếp từ ảnh vào.  
c) 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. 
+ Bằng cách chỉ ra chiều của ảnh kết quả.
  • 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:

Hình 1 Ảnh trước và sau khi imresize
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
  • Chỉ định phương pháp nội suy được sử 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(A,[mrows ncols],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 vector [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 ).
d) 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 
+ Kích thước của ảnh ra
  • 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)


Hình 2 Ảnh trước và sau khi imrotate
  • 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. Hàm 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)  
figure, imshow(J) 




Hình 3 Ảnh được quay theo chiều ngang
e) Xén ảnh (image cropping)
-  Để trích một vùng chữ nhật của một  ảnh, sử dụng hàm  imcrop. Hàm imcrop chấp nhận hai tham số chính: 
+ Ảnh cần xén  
+ Các góc của hình chữ nhật xác định vùng xén  
- Nếu ta gọi hàm imcrop mà không chỉ ra hình chữ nhật, ta có thể xén ảnh theo các tương tác. Trong trường hợp này, ta sử dụng trỏ chuột để chọn vùng chữ nhật cần xén bằng cách nhấn và giữ phím chuột trái và di chuyển để chọn vùng xén. Khi chọn xong thì nhả chuột. Trong ví dụ sau, ta hiển thị một  ảnh và gọi hàm imcrop. Hàm imcrop hiển thị ảnh trong một hình và  đợi ta vẽ vùng chữ nhật cần xén trên ảnh.
imshow circuit.tif  
I=imcrop; 
Imshow(I); 


Hình 4 Ảnh trước và sau khi imcrop
  • Hàm imcrop
- Cú pháp của nó như sau:
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(...)
  • Diễn giải
- 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); 
RGB2=imcrop(RGB); 
Hàm  imcrop sẽ hiển thị  ảnh I và  đợi ta chỉ ra hình chữ nhật cần xén bằng chuột  
- Nếu ta bỏ qua các tham số, hàm imcrop thao tác trên ảnh của trục hiện tại. 
- Để chỉ định một hình chữ nhật ta dùng trỏ chuột như đã nói ở trên  
- Ta cũng có thể chỉ ra kích thước của hình chữ nhật mà không thao tác trực tiếp như các cú pháp sau:
I2 = imcrop(I,rect)  
X2 = imcrop(X,map,rect)  
RGB2 = imcrop(RGB,rect) 
Trong  đó: rect là một vector bốn phần tử dạng [xmin ymin width height], những giá trị này được chỉ ra trong toạ độ không gian. Để chỉ định các toạ độ không theo toạ  độ không  gian cho ảnh vào,  đặt trước các tham số khác với 2 vector hai phần tử chỉ ra Xdata và Ydata. Chẳng hạn:
[…]=imcrop(x,y,…) 
- Nếu ta cung cấp các tham số ra phụ, hàm  imcrop sẽ trả lại thông tin về vùng chữ nhật  được chọn và hệ toạ độ của ảnh vào. Chẳng hạn:
[A,rect] = imcrop(...)  

[x,y,A,rect] = imcrop(...) 
A là ảnh ra, x và y là Xdata và Ydata của ảnh vào
  • Chú ý:
- Do rect là một tập hợp các toạ độ không gian, các phần tử width và height trong rect không luôn luôn tương ứng chính xác với kích thước của ảnh ra. Chẳng 
hạn, giả sử rect là [20 20 40 30], sử dụng hệ toạ độ không gian theo mặc định. Góc 
trên trái của vùng chữ nhật được chọn là tâm của pixel (20,20) và góc dưới phải của 
vùng chữ nhật là tâm của pixel (50,60). Ảnh ra là một ảnh có kích thước 31x41 chứ 
không phải 30x40.  Điều này là do  ảnh ra bao gồm tất cả các pixel trong  ảnh vào 
hoàn toàn hoặc một phần được bao bọc bởi vùng chữ nhật trên. 
Ví dụ
I = imread('circuit.tif'); 
I2 = imcrop(I,[75 68 130 112]); 
imview(I), imview(I2) 




Hình 5 Ảnh trước và sau khi imcrop theo 1 tọa độ cho trước
f) Các biến đổi ảnh thông dụng
-  Để thực hiện các biến  đổi không gian  ảnh 2 chiều, sử dụng hàm imtransform. Hàm này chấp nhận hai tham số chính:
    • Ảnh cần biến đổi
    • Một cấu trúc biến  đổi  được gọi là TFORM chỉ ra kiểu biến  đổi ta muốn thực hiện
    • Chỉ ra kiểu biến đổi
    - Ta chỉ ra kiểu biến đổi trong cấu trúc TFORM. Có hai cách để tạo một cấu trúc TFORM:
      • Sử dụng hàm maketform
      • Sử dụng hàm cp2tform
    • Sử dụng hàm maketform
    - Khi sử dụng hàm này, ta chỉ ra kiểu biến  đổi ta muốn thực hiện. Các kiểu biến đổi mà maketform trợ giúp bao gồm: 
    ’ affine’: Biến  đổi có thể bao gồm: translation ( dịch ), rotation ( quay ), scaling, stretching và shearing. Các  đường thẳng vẫn là  đường thẳng, đường song song vẫn song song nhưng hình chữ nhật có thể bị biến đổi  
    ’box’: Một trường hợp đặc biệt của affine khi mỗi chiều được dời và định tỉ lệ độc lập  
    + ‘composite ‘: Bao gồm tổ hợp của hai hay nhiều phép biến đổi  
    + ‘custom ‘: Biến  đổi do người dùng tự  định nghĩa, nó cung cấp các hàm thuận hoặc nghịch được gọi bởi hàm imtransform  
    + ‘projective ‘: Biến đổi trong đó các đường thẳng vẫn giữ nguyên nhưng các đường song song đồng quy lại thành một điểm.
    • Sử dụng cp2tform
    - Ta sử dụng hàm này để tạo ra cấu trúc TFORM khi ta muốn thi hành một biến đổi cần khít với các điểm dữ liệu như một biến đổi đa thức. 
    Chú ý: Khi sử dụng với hàm imtransform, cấu trúc TFORM phải định nghĩa một biến đổi 2 chiều. Nếu một ảnh chứa nhiều hơn một chiều chẳng hạn như ảnh RGB, cùng một biến đổi 2 chiều sẽ được áp đặt tới tất cả các mặt phẳng 2 chiều theo chiều cao hơn. Để định nghĩa một biến đổi n chiều sử dụng hàm imformarrray
    • Thực hiện biến đổi
    - Khi ta đã định nghĩa một cấu trúc TFORM, ta có thể thi hành một sự biến đổi bằng cách gọi hàm imtransform. Chẳng hạn, đoạn mã sau sử dụng hàm này để thi hành một biến đổi projective cho một ảnh bàn cờ:
    I = checkerboard(20,1,1);  
    figure; imshow(I)  
    T = maketform('projective',[1 1; 41 1; 41 41;   1 41],...  
     [5 5; 40 5; 35 30; -10 30]); 
    R = makeresampler('cubic','circular');  
    K = imtransform(I,T,R,'Size',[100 100],'XYScale',1);  
    figure, imshow(K)
    Hình 6 Ảnh trước và sau khi imtransforms
    - Các tuỳ chọn của hàm  imtransform cho phép ta  điều khiển nhiều khía cạnh của việc biến đổi. Chẳng hạn, chú ý rằng ảnh bị biến đổi xuất hiện nhiều bản copy của ảnh gốc. Điều này nhận được bởi tuỳ chon ‘size’.Xem thêm Help Online 
    • Hàm imtransform
    - Áp đặt một biến đổi không gian 2 chiều lên một ảnh
    • Cú pháp
    B = imtransform(A,TFORM) 
    B = imtransform(A,TFORM,INTERP) 
    [B,XDATA,YDATA] = imtransform(...) 
    [B,XDATA,YDATA] = imtransform(...,param1,val1,param2,val2,...)
    • Diễn giải
    + B=imtransform(A,TFORM ): biến đổi ảnh A theo cấu trúc được định nghĩa trong TFORM. Cấu trúc này được trả về từ hàm maketform hoặc cp2tform. Nếu ndims(A)>2 như các ảnh RGB thì cùng một biến  đổi không gian 2 chiều  được áp đặt tới tất cả các mặt phẳng theo chiều cao hơn. 
    Khi sử dụng cú pháp này, hàm imtransform tự động dịch gốc của ảnh ra để ảnh ra có thể được hiển thị nhiều nhất có thể. 
    B=imtransform(A,TFORM, INTERP): chỉ ra dạng của phép nội suy được sử dụng. INTERP có thể là một trong các giá trị ‘nearest’, ‘bicubic’ hoặc ‘bilinear’. 
    Tương tự, INTERP có thể là một cấu trúc  được trả về từ hàm makeresampler. Tuỳ chọn này cho phép điều khiển nhiều hơn lên việc lấy mẫu lại (resampling). 
    +  [B,XDATA,YDATA]= imtransform(…): trả về vị trí của  ảnh ra B trong không gian X-Y. XDATA và YDATA các vector hai thành phần. Những thành phần của XDATA chỉ ra toạ độ x của cột đầu và cuối của B. Những thành phần của YDATA chỉ ra toạ độ y của cột đầu và cuối của B. Bình thường, hàm imtransform tính toán XDATA và YDATA tự  động vì vậy B chứa toàn bộ  ảnh  đã biến  đổi A. Tuy nhiên, ta có thể đè chồng tính toán tự động này xem dưới đây:  
     [B,XDATA,YDATA] = imtransform(...,param1,val1,param2,val2,...): Chỉ ra các tham số điều khiển nhiều khía cạnh khác nhau của biến đổi không gian. Bảng sau liệt kê các tham số mà ta có thể chỉ ra.
    Tham số
    Diễn giải
    ‘UData’
    ‘VData’
    Cả hai tham số này là các vector hai phần tử thực. ‘Udata’ và ‘Vdata’ chỉ ra vị trí không gian của ảnh A trong không gian vào 2 chiều U-V. Hai phần tử của ‘Udata’ cho toạ độ u (hoành độ ) của cột đầu tiên và cuối cùng của A. Hai phần tử của ‘Vdata’ cho toạ độ v ( tung độ ) của hàng đầu tiên và cuối cùng của A.
    Giá trị mặc định cho ‘Udata’ và ‘Vdata’ tương ứng là [1 size(A,2) ] và [1 size(A,1) ]
    ‘Xdata’
    ‘Ydata’
    Cả hai tham số này là các vector hai phần tử thực chỉ ra vị trí không gian của ảnh ra B trong không gian ra 2 chiều X-Y. Hai phần tử của ‘Xdata’ chỉ ra hoành độ x của cột đầu tiên và cuối cùng của B. Hai phần tử của ‘Ydata’ chỉ ra tung độ của hàng đầu tiên và cuối cùng của B.
    Nếu ‘Xdata’ và ‘Ydata’ không được chỉ ra, hàm imtransform ước lượng giá trị cho chúng để có thể chứa toàn bộ ảnh ra đã bị biến đổi
    ‘XYScale’
    Là vector với một hoặc hai phần tử thực. Phần tử đầu tiên của ‘XYScale’ chỉ ra chiều rộng của mỗi pixel vào trong không gian X-Y. Phần tử thứ hai (nếu tồn tại) chỉ ra chiều cao của mỗi pixel ra. Nếu ‘XYScale’ chỉ có một phần tử, giá trị này sẽ được dùng cho cả chiều rộng và chiều cao.
    Nếu ‘XYScale’ không được chỉ định nhưng Size được chỉ ra thì ‘XYScale’ được tính toán từ ‘Size’,’Xdata’ và ‘Ydata’.
    ‘Size’
    Một vector hai phần tử nguyên không âm. ‘Size’ chỉ ra số hàng và cột trong ảnh ra B. Với chiều cao hơn, kích cỡ của B được lấy trực tiếp từ A. Nói cách khác, size(B,k) tương đương với size(A,k) với k>2. Nếu ‘Size’ không được chỉ định, nó sẽ được tính từ ‘Xdata’,’Ydata’ và ‘XYScale’
    ‘FillValues’
    Một mảng chứa một hoặc nhiều giá trị tô (fill values). Fill values được sử dụng cho các pixel trên ảnh ra khi vị trí được biến đổi tương ứng trên ảnh vào hoàn toàn là viền ngoài của ảnh ra. nếu A là 2 chiều, ‘Fillvalues’ phải vô hướng. Tuy nhiên, nếu chiều của A lớn hơn 2, ‘FillValues’ có thể là một mảng mà kích thước của nó thoả mãn ràng buộc sau:
    size(fill_values,k) phải bằng size(A,k+2) hoặc 1.
    Chẳng hạn, nếu A là một ảnh RGB unit8 có kích thước 200x200x3 thì các khả năng của ‘FillValues’ bao gồm:
    • 0: Tô với màu đen
    • [0;0;0]: Tô với màu đen
    • 255: Tô với màu trắng
    • [255;255;255]: Tô với màu trắng
    • [0;0;255]: Tô với màu xanh
    • [255;255;0]: Tô với màu vàng
    Nếu A là 4 chiều 200x200x3x10 thì ‘FillValues’ có thể là 1 vô hướng 1x10,3x1,3x1

    Ví dụ 
    Áp một phép dịch chuyển ngang tới một ảnh cường độ ;
    I = imread('cameraman.tif'); 
    tform = maketform('affine',[1 0 0;.5 1 0; 0 0 1]); 
    J = imtransform(I,tform); 
    imshow(I), figure, imshow(J) 



    Hình 7 Ảnh trước và sau khi imtransforms với 1 cường độ ảnh

    Như vậy là chúng ta đã tìm hiểu xong các hàm matlab hỗ trợ cho xử lý ảnh. 
    Phần tiếp theo chúng ta sẽ tìm hiểu về các thuật toán xử lý ảnh

    Không có nhận xét nào:

    Đăng nhận xét