1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Phương pháp phục hồi ảnh trong phần mềm MATLAB

41 109 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Phương Pháp Phục Hồi Ảnh Trong Phần Mềm MATLAB
Tác giả Phạm Thị Thùy Trang
Người hướng dẫn T.S Phạm Quý Mười
Trường học Đại Học Đà Nẵng
Chuyên ngành Toán Ứng Dụng
Thể loại Khóa luận tốt nghiệp
Năm xuất bản 2019
Thành phố Đà Nẵng
Định dạng
Số trang 41
Dung lượng 2,42 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Có 3 cách chính để ước lượng hàm suy giảm trong việc phục hồi ảnh: 1 Quan sát đối tượng 2 Tiến hành thí nghiệm 3 Mô hình toán học Các phương pháp đó được trình bày cụ thể trong từng phần

Trang 1

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM

Đà Nẵng, ngày 20 tháng 4 năm 2019

Trang 2

LỜI MỞ ĐẦU

Cùng với xu thế tự động hóa và trí tuệ nhân tạo đang phát triển mạnh mẽ, các bfi toán xử lý ảnh số cũng ngày càng trở nên đa dạng, phong phú và có ý nghĩa hết sức quan trọng đối với các ngành tự động hóa và trí tuệ nhân tạo Xử lí ảnh có rất nhiều ứng dụng trong thực tế như: xử lí tín hiệu truyền hình, xử lí ảnh vệ tinh, xử lí ảnh y học, điều khiển robot, truyền thông thị giác, thực thi pháp luật, và rất nhiều lĩnh vực khoa học và công nghệ hiện đại khác

Khái niệm ảnh số đã trở nên thông dụng với hầu hết mọi người trong xã hội và việc thu nhận ảnh số bằng các thiết bị cá nhân hay chuyên dụng cùng với việc đưa vào máy tính xử lý đã trở nên đơn giản Trong hoàn cảnh đó, xử lý ảnh là một lĩnh vực đang được quan tâm và đã trở thành môn học của sinh viên trong nhiều trường đại học trên cả nước

Matlab là một công cụ tính toán trong kỹ thuật, đặc biệt là các bài toán về ma trận Matlab còn cung cấp các toolboxes chuyên dụng để giải quyết những vấn đề

cụ thể như xử lý ảnh, xử lý số tín hiệu, neuron, mô phỏng… Matlab cung cấp

“Image Processing toobox” chuyên về xử lý ảnh Có thể nói Matlab là một công cụ thụ lí giúp cho việc thực hiện các giải thuật xử lý ảnh nhanh chóng và dễ hiểu Chính vì vậy, em đã lựa chọn đề tài khóa luận là: “ PHƯƠNG PHÁP PHỤC HỒI ẢNH TRONG PHẦN MỀM MATLAB” Đề tài đi vào tìm hiểu tổng quan về bài toán phục hồi ảnh và phương pháp xử lí trong MATLAB để có thể hiểu rõ thêm những tiềm năng hấp dẫn mà phương pháp này mang lại

Em xin chân thành cảm ơn các thầy cô khoa Toán đã tạo điều kiện cho em để hoàn thành khóa luận, đặc biệt là thầy Phạm Quý Mười, người đã trực tiếp hướng dẫn tận tình, giúp đỡ chỉ bảo cho em trong suốt quá trình làm khóa luận

Trang 3

MỤC LỤC :

CHƯƠNG I : KIẾN THỨC CƠ BẢN VỀ ẢNH SỐ

1 Các khái niệm cơ bản 5

1.1 Định nghĩa về ảnh kĩ thuật số và phục hồi ảnh 5

1.2 Xử lý ảnh kĩ thuật số 5

1.3 Vì sao cần xử lý hình ảnh 5

1.4 Độ phân giải hình ảnh 5

1.5 Độ tương phản hình ảnh 6

1.6 Mẫu bị nhiễu 6

1.7 Ước lượng hàm suy giảm 6

1.7.1 Ước lượng bằng quan sát hình ảnh 6

1.7.2 Ước lượng bằng thí nghiệm 7

1.7.3 Ước lượng bằng mô hình 7

1.8 Định nghĩa chuỗi Fourier và phép biến đổi chuỗi Fourier 8

1.8.1 Định nghĩa 8

1.8.2 Phép biến đổi Fourier 9

1.8.3 Phép biến đổi DCT 9

1.8.4 Chuỗi Fourier trong Matlab 10

1.8.5 Ý nghĩa chuỗi Fourier 12

1.9 Một số hàm Matlab cơ bản trong phục hồi ảnh 12

1.9.1 Hàm Matlab trong bộ lọc thống kê cấp bậc 12

1.9.2 Hàm Matlab trong bộ lọc ngược 12

1.10 Một số kiểu ảnh trong Matlab 13

1.10.1 Ảnh được định chỉ số (Indexed Images) 13

1.10.2 Ảnh cường độ (Intensity Images) 13

1.10.3 Ảnh nhị phân (Binary Images) 13

1.10.4 Ảnh RGB (RGB Images) 13

1.11 Những phép biến đổi hình học 14

1.11.1 Phép nội suy ảnh 14

1.11.2 Thay đổi kích thước ảnh 14

1.11.3 Phép quay ảnh 15

1.11.4 Trích xuất ảnh 16

1.11.5 Thực hiện phép biến đổi hình học tổng quát 16

Trang 4

2 Mô hình toán cho bài toán phục hồi ảnh 22

3 Một số hàm nhiễu cơ bản và cách thêm nhiễu vào ảnh 22

3.1 Hàm nhiễu Gauss 22

3.2 Hàm nhiễu Salt và Pepper 23

3.3 Hàm nhiễu Speckle 24

3.4 Hàm nhiễu Poisson 24

3.5 Hàm nhiễu Rayleigh 25

3.6 Hàm nhiễu Erlang(Gamma) 25

3.7 Hàm nhiễu mũ (Exponential) 26

3.8 Hàm nhiễu đều (uniform) 26

CHƯƠNG II : MỘT SỐ PHƯƠNG PHÁP GIẢI BÀI TOÁN PHỤC HỒI ẢNH 1 Bài toán phục hồi ảnh 26

2 Một số phương pháp giải và ví dụ 26

2.1 Phương pháp lọc trung bình 26

2.1.1 Kỹ thuật lấy giá trị trung bình số học 27

2.1.2 Kỹ thuật lấy giá trị trung bình hình học 28

2.1.3 Kỹ thuật trung bình điều hòa 29

2.2 Phương pháp Lọc thống kê cấp bậc 31

2.2.1 Hàm lọc trung vị 31

2.2.2 Hàm lọc Max và Min 32

2.2.3 Hàm lọc điểm chính giữa 33

2.3 Phương pháp lọc tần số 35

2.3.1 Phương pháp lọc chắn dải 35

2.3.2 Phương pháp lọc thông dải 35

2.3.3 Phương pháp bộ lọc cắt đột ngột 35

2.4 Phương pháp bộ lọc ngược 36

2.5 Phương pháp lọc sai số trung bình bình phương cực tiểu (Wiener) 38 KẾT LUẬN

TÀI LIỆU THAM KHẢO

Trang 5

CHƯƠNG I : KIẾN THỨC CƠ BẢN VỀ ẢNH SỐ

Trong chương này, chúng tôi trình bày một số khái niệm, kiểu ảnh cơ bản trong ảnh kĩ thuật số và một số phép biến đổi, hàm Matlab cơ bản nhằm phục vụ cho việc nghiên cứu về bài toán phục hồi ảnh Để có được kiến thức đầy đủ nhất về các khái niệm, phép biến đổi và hàm Matlab, người đọc có thể tham khảo ở tài liệu [2], [4],

[5]

1 Các khái niệm cơ bản

Ảnh kĩ thuật số là biểu diễn ảnh thực hai chiều như một tập hữu hạn các giá trị được gọi là phần tử hoặc điểm ảnh

Phục hồi ảnh là nhằm khôi phục lại ảnh bị hỏng, nhòe, mờ

Xử lý ảnh kĩ thuật số tập trung vào 2 mảng chính:

- Cải thiện thông tin các hình ảnh cho sự diễn dịch con người

- Xử lý dữ liệu hình ảnh cho lưu trữ, truyền đi và biểu diễn sự tự điều khiển

Để máy tính có thể hiểu và phân tích ảnh thì ảnh cần được mã hóa và biểu diễn dưới dạng số gọi là ảnh số Việc xử lý ảnh trên máy tính nhằm mục đích phân tích ảnh và phục hồi các thông tin bị sai lệch trong quá trình thu nhận ảnh

Hình 1: Quá trình xử lý ảnh

1.4 Độ phân giải hình ảnh

Xử lý ảnh Ảnh ban đầu

Kết luận Ảnh "tốt hơn"

Trang 6

Khái niệm “Resolution” – độ phân giải chỉ lượng thông tin chứa đựng trong một tập ảnh kĩ thuật số được hiển thị trên các thiết bị hoặc được in ra,thông thường được

đo bằng pixel Độ phân giải càng cao thì việc hiển thị ảnh càng mượt mà và chi tiết hơn Vì vậy, bức ảnh có độ phân giải cao sẽ có nhiều pixel mà mắt người không thể nhìn thấy

Pixel hay Megapixel là khối màu và là đơn vị cơ bản tạo nên ảnh kĩ thuật số

vô tuyến có thể bị hỏng vì ánh sáng hoặc nhiễu loạn của không khí

Có 3 cách chính để ước lượng hàm suy giảm trong việc phục hồi ảnh:

(1) Quan sát đối tượng

(2) Tiến hành thí nghiệm

(3) Mô hình toán học

Các phương pháp đó được trình bày cụ thể trong từng phần Quá trình của phục hồi ảnh là sử dụng hàm suy giảm để mà ước lượng theo một số cách được gọi là giải

mã mù, do thực tế là hàm suy giảm rất hiếm được biết đến hoàn toàn

1.7.1 Ước lượng bằng quan sát hình ảnh

Giả sử rằng chúng ta có một ảnh bị suy giảm mà không biết hàm suy giảm H Một cách để ước lượng hàm này là tập hợp thông tin từ chính ảnh đó Ví dụ, Nếu ảnh bị mờ, chúng ta có thể nhìn tại phần nhỏ của ảnh chứa cấu tạo đơn giản, chẳng hạn như phần đối tượng và phần nền

Để giảm hiệu ứng của nhiễu trong quan sát, chúng ta cần tìm kiếm khu vực có nội dung tín hiệu mạnh Sử dụng mức xám của đối tượng và hình nền xung quanh, chúng ta có thể dựng ảnh bị mờ có cùng kích thước và đặc trưng của đối tượng quan sát khi quan sát tiểu cảnh

Kí hiệu quan sát tiểu cảnh bởi hàm và dựng vùng tiểu cảnh (trong thực

tế là ước tính của chúng ta về một khu vực trong ảnh gốc) bởi hàm ̂ Sau đó, giả sử rằng hiệu ứng của nhiễu là không đáng kể vì sự lựa chọn của chúng ta là khu vực có tín hiệu mạnh, điều đó được biểu diễn dưới dạng phương trình sau:

̂

Trang 7

Từ đặc trưng của hàm này, chúng ta có thể suy ra một hàm đầy đủ h(u,v) bằng cách giả sử vị trí bất biến Ví dụ, giả sử rằng biểu đồ xuyên tâm của có hình dạng của bộ lọc chắn dải Butterworth đường thông thấp Chúng ta có thể sử dụng tất cả thông tin để dựng 1 hàm h(u,v) trên 1 quy mô lớn, nhưng phải có mẫu giống

1.7.2 Ước lượng bằng thí nghiệm

Nếu thiết bị ảnh suy giảm có sẵn, thì về nguyên tắc ta cần uớc lượng chính xác hàm suy giảm Sau đó, duy trì phản ứng xung lực của hàm suy giảm bằng ảnh có xung (chấm sáng nhỏ) sử dụng trong cùng hệ thống Chú ý rằng, sự tuyến tính, hệ thống không gian bất biến luôn được miêu tả hoàn thiện bằng chính phản ứng xung lực

Xung lực được mô phỏng bằng những chấm sáng, và ánh sáng đó có thể giảm hiệu ứng của nhiễu Sau đó, cần nhắc lại phép biến đổi chuỗi Fourier của xung lực

là hằng số, được cho phép trong phương trình sau:

Với g(u,v) được cho trước đó là phép biến đổi chuỗi Fourier của ảnh quan sát và

là hằng số mô tả độ lớn của xung lực Hình ảnh sau sẽ làm rõ ví dụ:

Ước lượng hàm suy giảm bằng đặc tính của xung lực

Hình (1) xung lực của chấm sáng

Hình (2) ảnh bị suy giảm bởi xung lực

1.7.3 Ước lượng bằng mô hình

Mô hình bị suy giảm đã tồn tại rất nhiều năm bởi vì sự vật bên trong ảnh quá mờ cần phải phục hồi Trong một số trường hợp, mô hình có thể bị mờ do điều kiện môi trường gây ra suy giảm Ví dụ, một mẫu bị suy giảm được đề xuất bởi Hufnagel và Stanley (1964) dựa trên tính chất vật lí của không khí hỗn loạn Mẫu có hàm tương tự:

Với k là hằng số phụ thuộc vào hỗn loạn không khí Và lũy thừa 5/6 làm cho phương trình này có mẫu giống như bộ lọc thông thấp Gauss Thật ra bộ lọc thông thấp Gauss đã từng là mô hình nhẹ, có mẫu mờ Hình ảnh dưới đây mô phỏng ảnh

mờ với các giá trị k= 0.0025 (nhiễu loạn nghiêm trọng), k=0.001 (nhiễu loạn trung

Trang 8

bình), k=0.00025 (nhiễu loạn thấp) Tất cả các ảnh đều có cùng size 480 480 pixels Ảnh gốc đầu tiên dược chụp từ NASA và nhiễu loạn không khí trong mô hình được mô tả

Trang 9

Loại chuỗi Fourier này được gọi là chuỗi Fourier hàm mũ Tần số được

gọi là tần số cơ bản của tín hiệu Sóng thứ n có tần số

Nếu là tín hiệu tuần hoàn với giá trị thực thì tính chất liên hợp phức được

thỏa mãn Điều này có nghĩa với * là biểu thị của liên hợp phức Ta

có thể tính được hệ số âm bằng cách lấy liên hợp phức của hệ số dương Dựa theo

kết quả này, ta có thể thấy được :

| | | |

1.8.2 Phép biến đổi Fourier 2 chiều

Phép biến đổi Fourier biểu diễn ảnh dưới dạng tổng của các lũy thừa phức của

các thành phần biên độ, tần số, pha khác nhau của ảnh Nếu f(m,n) là một hàm của

hai biến không gian rời rạc m và n, thì biến đổi Fourier hai chiều của f(m,n) được

định nghĩa:

∑ ∑

Nếu f(m,n) biểu diễn độ sáng của ảnh X ở vị trí pixel (m,n) thì F(w1,w2) chính

là biến đổi Fourier của ảnh X Do các dữ liệu trên máy tính được lưu trữ dưới dạng

rời rạc, cụ thể là dữ liệu ảnh được tổ chức theo đơn vị pixel nên phép biến đổi

Fourier cũng được rời rạc hóa thành biến đổi Fourier rời rạc (DFT) Giả sử hàm

f(m,n) chỉ khác 0 trong miền (0 m M-1,0 n N-1), các phép biến đổi DFT thuận

và nghịch kích thước M x N được định nghĩa như sau:

∑ ∑ ( ) ( )

(0 m M-1,0 n N-1) ∑ ∑ ( ) ( )

(0 m M-1,0 n N-1)

F(p,q) gọi là các hệ số của biến đổi DFT Với các ứng dụng trong xử lý ảnh, chúng

ta chỉ quan tâm đến các hàm fft2 và ifft2 Cú pháp: F=fft2(X,mrows,ncols) f=ifft2(F,mrows,ncols) Nếu ảnh ban đầu có kích thước nhỏ hơn thì Matlab tự động

thêm vào các zero pixel trước khi biến đổi Sau khi thực hiện biến đổi DFT bằng

fft2, thành phần DC sẽ nằm ở góc trên bên trái của ảnh Ta có thể dùng hàm fftshift

để dịch thành phần DC này về trung tâm của ảnh

1.8.3 Phép biến đổi DCT 2 chiều

Biến đổi DCT (Discrete Cosine Transform) biểu diễn ảnh dưới dạng tổng của

các cosine của các thành phần biên độ và tần số khác nhau của ảnh Hầu hết các

thông tin về ảnh chỉ tập trung trong một vài hệ số của biến đổi DCT, trong khi các

hệ số còn lại chứa rất ít thông tin Biến đổi DCT 2 chiều của một ma trận A kích

thước M x N là:

Trang 10

∑ ∑

(0 p M-1,0 q N-1) Phép biến đổi DCT thuận và nghịch được thực hiện bằng các hàm dtc2 và idtc2 Các hàm này sử dụng giải thuật dựa theo FFT để tăng tốc độ tính toán

Cú pháp:

B=dtc2(A,M,N)

A=idtc2(B,M,N)

1.8.4 Chuỗi Fourier trong Matlab

Code Matlab: Thực hiện phép biển đổi Fourier rời rạc 1 chiều cho một ảnh đơn giản:

f = zeros(30,30); % Tao mot anh kich thuoc 30x30

title('Anh bien doi 30x30');

colormap(jet); colorbar % Hien thi anh bien doi

F = fft2(f,256,256); % Bien doi DFT voi kich thuoc 256x256

subplot(1,4,3),imshow(log(abs(F)),[-1 5]); colormap(jet); colorbar % Hien thi anh

title('Anh bien doi 256x256');

F2 = fftshift(F); % Chuyen thanh phan DC ve trung tam

subplot(1,4,4),imshow(log(abs(F2)),[-1 5]); colormap(jet); colorbar % Hien thi anh

title('Su dung fftshift');

Trang 11

Code Matlab: Thực hiện phép biển đổi Fourier rời rạc 2 chiều thuận và ngược cho một ảnh đơn giản:

RGB = imread('autumn.jpg');

I = rgb2gray(RGB);% Chuyen sang dang grayscale

J = dct2(I);% Bien doi DCT

subplot(1,3,3);imshow(log(abs(J)),[]),colormap(jet(64)), colorbar % Hien thi bien doi DCT

J(abs(J) < 10) = 0;% Nen các he so <10 ve 0

K = idct2(J);% Bien doi nguoc DCT

subplot(1,3,1);imshow(I) % Hien thi anh goc

subplot(1,3,2);imshow(K,[0 255])% Hien thi anh sau khi nen

Hình (1) là ảnh gốc

Hình (2) là ảnh sau khi nén

Hình (3) là ảnh biến đổi của ảnh gốc

Trang 12

1.8.5 Ý nghĩa chuỗi Fourier

Dùng để phân tích được sự phân bố năng lượng của tín hiệu và qua phân tích quang phổ thì ta biết được năng lượng tập trung chủ yếu ở tần số thấp Từ đó có thể đưa ra các phương pháp thiết kế bộ lọc thích hợp để lấy được năng lượng của tín hiệu tối ưu nhất Phép biến đổi Fourier có nhiều ứng dụng, chẳng hạn tìm đáp ứng tần số của các bộ lọc tuyến tính, tính tích chập, tìm ảnh tương quan…

1.9.1 Hàm Matlab trong bộ lọc thống kê cấp bậc

>>g=ordfilt2(f, order, domain)

Hàm ordfilt sắp xếp thứ tự từ nhỏ đến lớn các điểm nằm trong một miền xác định domain, domain là một ma trận có kích thước cửa sổ lọc, gồm có các phần tử

có giá trị 0,1 dùng để xác định các điểm ảnh lân cận được sử dụng, các điểm ảnh ứng với 0 sẽ không được xếp hạng Pixel của ảnh gốc sẽ được thay thế bằng giá trị mức xám thứ hạng Giả sử muốn lấy phần tử nhỏ nhất trong lân cận , ta dùng lệnh:

1.9.2 Hàm Matlab trong bộ lọc ngược

Hàm fft: biến đổi Fourier thuận (tức là miền thời gian sang miền tần số)

Hàm iff: biến đổi Fourier ngược (tức là biến đổi ngược lại, miền tần số qua miền thời gian)

Hàm tffshift: dịch chuyển tần số zero vào trung tâm qung phổ

Hàm sound: âm thanh nghe chưa định tỉ lệ (clip đầu vào [-1,1])

Hàm soundsc: âm thanh thu nhỏ (quy mô/bình thường hóa đầu vào [-1,1])

Hàm wavread: đọc, định dạng file WAV, tỉ lệ lấy mẫu của file WAV cũng có thể được lấy ra bằng các câu lệnh như sau:

[x,Fs] = wavread(‘filename.wav’) với x là vector âm thanh và Fs là tần số lấy mẫu Hàm fft2 cho ta biến đổi Fourier của ma trận không gian 2 chiều:

Trang 13

Và hàm ifftshift đưa điểm vị trí trung tâm về góc trái trên cùng quang phổ:

>>F=ifftshift(F2) ;

1.10 Một số kiểu ảnh trong Matlab

1.10.1 Ảnh được định chỉ số (Indexed Images)

Một ảnh được đị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 được đị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

1.10.2 Ả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

1.10.3 Ả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

1.10.4 Ả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 đị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 ảnh

Đ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

Trang 14

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)

1.11 Những phép biến đổi hình học

Các phép biến đổi hình học là những phép toán biến các điểm ảnh từ vị trí này thành các điểm ảnh ở vị trí khác trong ảnh mới Đó là những thao tác xử lý ảnh cơ bản như quay, thay đổi kích thước, cắt một phần ảnh,

1.11.1 Phép nội suy ảnh

Nội suy là quá trình ước lượng giá trị của ảnh tại một điểm nằm giữa hai pixel

có giá trị đã biết Chẳng hạn, nếu ta thay đổi kích thước ảnh sao cho nó chứa nhiều pixel hơn ảnh gốc, thì giá trị của các pixel thêm vào sẽ được xác định bằng phép nội suy Phép nội suy cũng là cơ sở để thực hiện các biến đổi hình học khác, ví dụ biến đổi kích thước hoặc quay ảnh, Image Processing Toolbox cung cấp ba phương pháp nội suy ảnh, bao gồm: nội suy theo các lân cận gần nhất, nội suy song tuyến tính và nội suy bicubic

Cả ba phương pháp đều thực hiện theo một nguyên tắc chung: để xác định giá trị của một pixel ảnh nội suy, ta tìm một điểm trong ảnh ban đầu tương ứng với pixel

đó, sau đó giá trị của pixel ở ảnh mới sẽ được tính bằng trung bình có trọng số của một tập các pixel nào đó ở lân cận của điểm vừa xác định, trong đó trọng số của các pixel phụ thuộc vào khoảng cách tới điểm này

Với phương pháp lân cận gần nhất, pixel mới sẽ được gán giá trị của pixel chứa điểm tương ứng của nó (pixel mới) trong ảnh ban đầu Với phương pháp song tuyến tính, pixel mới sẽ được gán là trung bình có trọng số của các pixel trong một lân cận kích thước 2x2 Với phương pháp bicubic, pixel mới sẽ được gán là trung bình có trọng số của các pixel trong một lân cận kích thước 4x4 Phương pháp đầu tiên là phương pháp đơn giản và nhanh nhất, nhưng chất lượng không tốt bằng hai phương pháp còn lại Số pixel được đưa vào để tính trọng số càng nhiều thì chất lượng càng tốt nhưng thời gian càng lâu

Ngoài ra, chỉ có phương pháp đầu tiên là có thể áp dụng cho mọi kiểu ảnh và kiểu dữ liệu vì nó không làm thay đổi tập giá trị của các pixel Các phương pháp còn lại không thích hợp cho ảnh indexed, nhưng với ảnh RGB thì nên dùng các phương pháp này để bảo đảm chất lượng ảnh Với ảnh RGB, phép nội suy được thực hiện một cách riêng biệt trên ba mặt phẳng màu đỏ, lam và lục Với ảnh nhị phân dùng nội suy song tuyến tính hoặc bicubic, cần lưu ý đến kiểu dữ liệu, vì giá trị của pixel mới có thể nhận giá trị khác 0 và 1 Nếu ảnh gốc thuộc kiểu double thì ảnh mới sẽ là ảnh trắng đen thuộc kiểu double, nếu ảnh gốc thuộc kiểu uint8 thì ảnh mới sẽ là ảnh nhị phân kiểu uint8, trong đó các giá trị khác 0 và 1 sẽ được làm tròn

về 0 hoặc 1

1.11.2 Thay đổi kích thước ảnh

Hàm imresize cho phép người sử dụng thay đổi kích thước của ảnh Ngoài kích thước ảnh mới, người sử dụng còn có thể xác định phương pháp nội suy sẽ dùng và loại bộ lọc dùng để chống aliasing

>> b = imresize(a,m,Method)

Trang 15

Dòng lệnh trên tạo ảnh mới b có kích thước gấp m lần ảnh gốc a Method là một chuỗi xác định phương pháp nội suy sẽ dùng: ‘nearest’ (lân cận gần nhất), ‘bilinear’ (song tuyến tính) hoặc ‘bicubic’ Phương pháp mặc định là ‘nearest’ Thay vì xác định tỷ số m, ta có thể xác định trực tiếp kích thước ảnh mới theo đơn vị pixel bằng cách dùng cú pháp:

>> b = imresize(a,[mrows mcols],method)

Trong đó mrows và mcols là số cột và số hàng của ảnh mới Hoặc ta cũng có thể xác định cụ thể bậc của bộ lọc chống aliasing (kích thước mặc định là 11x11) hoặc cung cấp cụ thể đáp ứng xung h của bộ lọc theo các cú pháp dưới đây:

và ‘loose’ (tăng kích thước nếu cần) Trong trường hợp tăng kích thước, các điểm ảnh ở ngoải phần ảnh gốc sẽ được set về 0 (màu đen) Dưới đây là cú pháp của hàm này, với Bbox là chuỗi xác định kích thước ảnh mới

>> b = imrotate(a,angle,Method,Bbox)

Ví dụ : Quay ảnh đi một góc 35 ° , dùng phương pháp nội suy song tuyến tính:

Trang 16

Nếu chọn cách thứ nhất, ta dùng cú pháp như sau:

>> x2 = imcrop(x,map,rect) % Ảnh indexed

>> a2 = imcrop(a,rect) % Ảnh grayscale hoặc RGB

Trong đó rect = [Xmin Ymin width height], với (Xmin,Ymin) là toạ độ góc trên bên trái của phần ảnh cần trích, width và height là chiều rộng và chiều cao của phần ảnh cần trích

Nếu dùng cách thứ hai, ta không cần cung cấp thông số rect, khi thực hiện hàm này, con trỏ sẽ chuyển sang dạng chữ thập, người dùng sẽ drag chuột để chọn phần ảnh cần trích sao đó thả chuột Hàm imcrop sẽ trả về phần ảnh nằm trong phạm vi xác định bởi mouse

Nếu không cung cấp thông số ảnh gốc, hàm imcrop sẽ mặc định chọn ảnh trên

hệ trục tọa độ hiện hành Ngoài ra, trong trường hợp xác định bằng mouse, người sử dụng có thể truy xuất các thông tin về vị trí và kích thước của phần ảnh đã chọn bằng cách yêu cầu thêm các output của hàm này:

>> [A2,rect] = imcrop(A)

>> [X2,rect] = imcrop(X,map)

1.11.5 Thực hiện phép biến đổi hình học tổng quát

Trang 17

Ngoài các phép biến đổi hình học cụ thể trên đây, MATLAB còn cho phép thực hiện các phép biến đổi hình học khác do người sử dụng tuỳ định bằng cách cung cấp một hàm thực hiện biến đổi hình học tổng quát, đó là hàm imtransform Để thực hiện một phép biến đổi hình học nào đó, người sử dụng cần cung cấp ảnh cần biến đổi A và cấu trúc của phép biến đổi hình học gọi là TFORM

>> B = imtransform(A,TFORM,interp)

>> [B,XData,YData] = imtransform( ,param1,val1,param2,val2, )

trong đó, interp là chuỗi xác định phương pháp nội suy sẽ dùng (Xdata,Ydata) xác định vị trí của ảnh B trong hệ trục X-Y Ngoài ra có thể cung cấp thêm các cặp thông số (tên thông số/giá trị thông số) để xác định các thông số cụ thể của phép biến đổi Bạn đọc có thể tìm hiểu các thông số này bằng cách gõ lệnh help imtransform từ cửa sổ lệnh của MATLAB

Như vậy, vấn đề quan trọng nhất khi gọi hàm này là phải xác định cấu trúc của phép biến đổi Việc này được thực hiện bằng cách sử dụng các hàm xây dựng cấu

trúc biến đổi, trong đó thông dụng nhất là hai hàm maketform và cp2tform

‘affine’ Các phép biến đổi affine,

bao gồm phép dịch, phép quay, co giãn, và xén

Đường thẳng biến thành đường thẳng, bảo toàn tính song song nhưng không bảo toàn góc (hình chữ nhật có thể trở thành hình bình hành)

T=maketform(‘affine’,A) T=maketform(‘affine’,U,X)

A là ma trận (N+1) x (N+1) hoặc (N+1) x N sao cho vector U1 (1xN)

sẽ biến thành vector X1 = U1 * A(1:N,1:N) + A(N+1,1:N)

U và X là các ma trận sao cho mỗi hàng của U biến thành hàng tương ứng của X sau phép biến đổi

U và X đều có kích thước 3x2, gồm toạ độ của 3 đỉnh của 1 tam giác

‘projective’ Các phép biến đổi trong đó

các đường thẳng vẫn biến thành đường thẳng nhưng các đường song song trở nên hội tụ tại 1 điểm nào đó trong hoặc ngoài ảnh (có thể là vô cực)

T=maketform(‘projective’,A) T=maketform(‘projective’,U,X)

A là ma trận (N+1) (N+1) sao cho vector U1 (1xN) sẽ biến thành vector X1 = W(1:N)/W(N+1) với

W = [U 1] * A

U và X là các ma trận sao cho mỗi hàng của U biến thành hàng tương ứng của X sau phép biến đổi

U và X đều có kích thước 4x2, gồm toạ độ của 4 đỉnh của 1 tứ giác

‘box’ Trường hợp đặc biệt của

phép biến đổi affine, trong

đó mỗi chiều được dịch và

co giãn một cách độc lập với nhau

T=maketform('box',Tsize,low,high) T=maketform('box',inbounds,outbounds)

Phép biến đổi sẽ ánh xạ vùng giới hạn bởi các đỉnh có toạ độ xác định bởi inbounds (hoặc ones(1,N) và

Trang 18

Tsize) thành vùng giới hạn bởi các đỉnh có toạ độ xác định bởi outbounds (hoặc low và high) inbounds và outbounds: 2xN Tsize, low, high: 1xN

‘custom’ Các phép biến đổi do người

dùng tự định nghĩa

T=maketform('custom',Ndims_in,Ndims_out,forward_fcn,inverse_fcn,TData)

Ndims_in,Ndims_out: số chiều của ảnh vào và ra

forward_fcn,inverse_fcn: các hàm thực hiện biến đổi thuận và nghịch TData: các thông số khác kèm theo

‘composite’ Kết hợp hai hay nhiều phép

biến đổi

T=maketform('composite',T1,T2, ,TL) T1,T2, ,

TL: các phép biến đổi đã định nghĩa trước

Bảng : Các dạng biến đổi hình học có thể dùng với hàm maketform

Cú pháp chung của hàm maketform:

>> T = maketform(TFORM_type, )

trong đó TFORM_type là một chuỗi xác định dạng cấu trúc biến đổi hình học, và sau đó là các thông số đi kèm tuỳ thuộc vào từng dạng cấu trúc cụ thể Các dạng cấu trúc này được trình bày trong bảng 11.4

Hàm cp2tform trả về cấu trúc của phép biến đổi bàng cách suy từ các cặp điểm điều khiển trong ảnh gốc và sau khi biến đổi:

>> TFORM = cp2tform(input_points,base_points,TFORM_type,order)

input_points và base_points là các ma trận M x 2 xác định toạ độ (X,Y) của M điểm điều khiển trong ảnh biến đổi và trong ảnh gốc TFORM_type có thể là một trong những chuỗi sau: 'linear conformal', 'affine', ‘projective’, ‘polynomial’, ‘piecewise linear’, ‘lwm’ Nếu là ‘polynomial’ thì cần cung cấp thêm thông số order cho biết bậc của đa thức (mặc định bằng 3)

Ví dụ : Thực hiện phép xạ ảnh để tạo hiệu ứng 3D cho ảnh “ bàn cờ ”:

Code Matlab:

I = checkerboard(20,1,1); % Tao anh ban co

subplot(1,2,1); imshow(I)

T = maketform('projective',[1 1; 41 1; 41 41; 1 41],

[5 5; 40 5; 35 30; -10 30]); % Dinh nghia phep bien doi xa anh

R = makeresampler('cubic','circular'); % Dinh nghia cau truc resampler

K = imtransform(I,T,R,'Size',[100 100],'XYScale',1); % Thuc hien phep xa anh

subplot(1,2,2), imshow(K)

Trang 19

1.11.6 Biến đổi Radon

Phép biến đổi Radon, được thực hiện bởi hàm radon trong MATLAB, biểu diễn ảnh dưới dạng các hình chiếu của nó dọc theo các hướng xác định Hình chiếu của một hàm hai biến f(x,y) là một tập hợp các tích phân đường Hàm radon tính các tích phân đường từ nhiều điểm nguồn dọc theo các đường dẫn song song, gọi là các tia chiếu (beam), theo một hướng xác định nào đó Các tia chiếu này nằm cách nhau

1 pixel Để biểu diễn toàn bộ ảnh, hàm radon sẽ lấy nhiều hình chiếu song song của ảnh từ các góc quay khác nhau bằng cách xoay các điểm nguồn quanh tâm của ảnh Quá trình này được minh hoạ ở hình a):

Ví dụ, tích phân đường của f(x,y) theo hướng thẳng đứng chính là hình chiếu của f(x,y) trên trục x, còn tích phân đường của f(x,y) theo hướng nằm ngang chính

là hình chiếu của f(x,y) trên trục y hình b)

Tổng quát, biến đổi Radon của f(x,y) ứng với góc quay θ là tích phân đường của

f dọc theo trục y’:

Trang 20

Trong đó (x’,y’) là hệ trục toạ độ có được bằng cách xoay hệ trục (x,y) đi một góc bằng :

[ ] [

] [ ] Trong MATLAB, biến đổi Radon được tính bằng cú pháp sau:

>> [R, Xp]= radon(I, theta)

Trong đó: theta là một vector gồm các góc quay cần tính biến đổi Radon R là một

ma trận mà mỗi cột của nó là biến đổi Radon R(x’) ứng với một góc quay theta

Xp là vector chứa các toạ độ x’ tương ứng (Xp là như nhau đối với mọi góc quay theta)

Ví dụ: Khảo sát biến đổi Radon của ảnh một đối tượng hình vuông:

a Vẽ biến đổi Radon như một hàm của x’ trong hai trường hợp θ = 0° và θ = 45°

b Hiển thị biến đổi Radon dưới dạng một ảnh

Code MATLAB:

I = zeros(120,120); % Tao anh goc

I(20:70, 20:70) = 1; % Anh hình vuông

subplot(1,4,1),imshow(I) % Hien thi anh goc

[R,xp] = radon(I,[0 45]); % Bien đoi Radon ung voi các góc 0° và 45°

subplot(1,4,2),plot(xp,R(:,1));title('R_{0^o}

(x\prime)') % Ve bien đoi Radon ung voi goc 0°

subplot(1,4,3),plot(xp,R(:,2));title('R_{45^o}

(x\prime)') % Ve bien đoi Radon ung voi goc 45°

theta = 0:180; % Cho goc quay thay đoi tu 0° đen 180° [R,xp] = radon(I,theta);% Tìm bien đoi Radon

subplot(1,4,4),imagesc(theta,xp,R);% Hien thi bien doi Radon

Ngày đăng: 08/05/2021, 14:22

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Arsath Natheem. Digital Image Processing using MATLAB: ZERO to HERO, [2] Pasi Franti (2002). Image Compression, Lecture Notes, University of Joensuu Sách, tạp chí
Tiêu đề: Digital Image Processing using MATLAB: ZERO to HERO, "[2] Pasi Franti (2002)". Image Compression
Tác giả: Arsath Natheem. Digital Image Processing using MATLAB: ZERO to HERO, [2] Pasi Franti
Năm: 2002
[3] PGS.TS Đỗ Năng Toàn, T.S Phạm Việt Bình. Xử lý ảnh, Đại Học Thái Nguyên Sách, tạp chí
Tiêu đề: Xử lý ảnh
[4] PGS.TS Nguyễn Quang Hoan (2006). Xử lý ảnh, Học Viện Công Nghệ Bưu Chính Viễn Thông Sách, tạp chí
Tiêu đề: Xử lý ảnh
Tác giả: PGS.TS Nguyễn Quang Hoan
Năm: 2006
[5] Rafael C.Gonzalez, Richard E.Wood. Digital Image Processing Secon Edition, [6] Rafael C.Gonzalez, Richard E.Wood. Digital Image Processing Using MATLAB Second Edition Sách, tạp chí
Tiêu đề: Digital Image Processing Secon Edition", [6] Rafael C.Gonzalez, Richard E.Wood
[7] The Mathworks. Image Processing Toolbox for use with MATLAB Khác

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w