Các hàm chuyển đổi kiểu ảnh

Một phần của tài liệu Xử lý ảnh mờ và xây dựng chương trình ứng dụng (Trang 28)

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 muốn lọc một màu ảnh được lưu trữ dưới dạng ảnh chỉ số, đầu tiên, nên chuyển đổi nó thành dạng ảnh RGB. Khi áp dụng phép lọc tới ảnh RGB, Matlab sẽ lọc giá trị cường độ trong ảnh

-23-

tương ứng. Nếu 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.

Khi convert 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 convert một ảnh màu chỉ số sang một ảnh cường độ, kết quả 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 convert ả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ộng (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ệ dữ 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

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, có thể convert 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.

-24-

CHƯƠNG 2: XỬ LÝ ẢNH MỜ 2.1. Ảnh mờ

2.1.1. Định nghĩa ảnh mờ

Ảnh mờ là ảnh bị mờ nhạt, hình ảnh không được rõ, khó có thể nhìn rõ những hình ảnh trong bức ảnh. Đường nét của ảnh không rõ ràng. Nói cách khác ảnh mờ chính là ảnh bị hư hại.

2.1.2. Nguyên nhân ảnh bị mờ

Các quá trình hư hại ảnh hay làm mờ ảnh được gây ra bởi nhiều tác nhân:

- Nguyên nhân thứ nhất là do chuyển động của camera hay của vật cảnh khi ghi ảnh.

- Nguyên nhân thứ hai là do vật nằm ngoài tiêu cự của thấu kính hoặc do lăng kính mở góc quá rộng, có quá nhiều ánh sáng hoặc do chuyển động hỗn loạn của không khí hoặc do ánh sáng bị tán xạ trong tiêu điểm của máy ảnh.

- Nguyên nhân thứ ba là bị nhòe do thời gian…

Trong phần này sẽ trình bày mô hình hư hại gây ra do chuyển động và sau đó sẽ trình bày sự khôi phục lại ảnh bị hư hại nhờ các phương pháp lọc đã được mô hình hóa trong hộp công cụ của MATLAB.

Ảnh bị hư hại hay ảnh bị mờ có thể được biểu thị bằng phương trình ma trận:

g(x,y) = h(x,y)*f(x,y) + n(x,y) (2.1)

Trong đó g(x,y) là ảnh bị hư hại; h(x,y) là hàm mở rộng (PSF) hay còn gọi là toán tử đặc trưng cho quá trình hư hại ảnh. f(x,y) là ảnh không bị hư hại; đó cũng chính là ảnh mà chúng ta cần khôi phục lại. n(x,y) là tạp nhiễu cộng thêm trong quá trình ghi ảnh hoặc truyền ảnh số nhiễm vào.

-25-

Trong Matlab hàm mở rộng điểm đặc trưng cho ảnh mờ do quá trình chuyển động của camera hoặc của vật trong cảnh được mô hình hóa nhờ hàm fspecial:

PSF = fspecial(‘motion’,len,theta)

Hàm fspecial phát ra hàm mở rộng điểm PSF do chuyển động tuyến tính của camera hay của vật cảnh đối với kính ảnh một lượng len pixels. Tham số theta chỉ thị phương chuyển động so với phương nằm ngang một góc theta, góc này đo bằng độ. Giá trị mặc định của len = 9 và theta = 0 có nghĩa là chuyển động dọc theo trục x một lượng 9 pixels.

2.2. Khôi phục ảnh mờ

Nếu một ảnh bị hư hại thì đại lượng nào là đại lượng bị ảnh hưởng nhiều nhất? Dễ nhận thấy nhất: đó chính là giá trị mức xám và vị trí của các pixel thành phần. Giá trị mức xám có thể bị biến đổi và vị trí của các pixel có thể bị biến dạng; có nghĩa là ảnh có thể bị mờ đi hoặc bị méo mó. Do đó để khôi phục lại ảnh hoàn chỉnh cần cải thiện giá trị mức xám của các pixel, đồng thời khôi phục kích thước hình học của ảnh dưới các góc nhìn khác nhau. Khôi phục kích thước hình học của ảnh, chính là phép ghi ảnh. Bởi vì nó cho phép ta nhận ra các điểm tương ứng của hai ảnh trong cùng một vùng dưới các góc nhìn khác nhau. Sự khôi phục có vai trò hết sức quan trọng trong chụp ảnh và truyền ảnh từ xa trong ghi ảnh y – sinh học hay trong liên lạc vũ trụ...

2.2.1. Sơ đồ quá trình khôi phục ảnh mờ

f(x,y) g(x,y) f’(x,y) f (x,y)

( , )x y

Nhiễu gây hư hại

Hình 2.1. Mô hình hóa sự khôi phục lại ảnh gốc Hàm hư

hại H +

Lọc khôi phục ảnh

-26-

Quá trình khôi phục ảnh được mô hình hóa trên sơ đồ hình 2.1. Như thấy trên sơ đồ, ảnh hư hại f’(x,y) do một hàm hư hại H và do các nhiễu cộng thêm

( , )x y

 gây ra

f’(x,y) = H[f(x,y)] + ( , )x y (2.2)

Mục tiêu của sự khôi phục ảnh là từ ảnh hư hại này xác định được ảnh gốc f(x,y) khi hàm hư hại H và nhiễu đã biết. Và hiển nhiên, càng biết nhiều về nguyên nhân gây hư hại ảnh; tức là hàm H và nhiễu ( , )x y thì ảnh khôi phục lại f’(x,y) sẽ càng gần với ảnh gốc f(x,y).

Nếu H là một quá trình tuyến tính và bất biến với không gian, thì trong lĩnh vực không gian, ảnh hư hại sẽ được xác định bởi phương trình :

f x y'( , ) h x y( , ) * ( , )f x y ( , )x y (2.3) trong đó

g(x,y) = h(x,y)*(x,y) (2.4)

là nhân chập hai mảng dữ liệu h(x,y) và ảnh f(x,y). Nếu là ảnh số, thì :

( , ) ( , ) ( , , , ) N N i j g m n  f i j h i j n m (2.5) Hay dưới dạng ma trận g = Hf (2.6)

Ở đây h(x,y) là đáp ứng xung đơn vị 2D của hàm hư hại H, ký hiệu * là nhân chập 2D giữa hai mảng dữ liệu h và f(x,y). Nếu lấy biến đổi Fourier 2D phương trình (2.3) và (2.4) ta sẽ thu được :

F(u,v) = H(u,v)F(u,v) + N(u,v) (2.7) Và

G(u,v) = H(u,v)F(u,v) (2.8)

Đây chính là biểu diễn hư hại f’(x,y) trên lĩnh vực tần số. Như vậy, nếu biết được hàm truyền hư hại h(x,y) và xác định được biến đổi Fourier của ảnh

-27-

hư hại G(u,v) thì ta có thể xác định được biến đổi Fourier của ảnh không bị hư hại nhờ hệ thức :

F(u,v) = ( , )

( , )

G u v

H u v (2.9)

và từ đó khôi phục được ảnh gốc f(x,y) bằng cách lấy biến đổi Fourier nghịch đảo của hàm F(u,v). Tuy nhiên, cách làm này không phải bao giờ cũng thực hiện được. Thật vậy, nếu h(u,v) = 0 thì điều gì sẽ xảy ra tại điểm (u,v) đó? Hàm H(u,v) có thể có giá trị bằng không tại một số điểm trong mặt phẳng (u,v); có nghĩa là G(u,v) cũng có giá trị bằng không tại các điểm đó. Do vậy hàm F(u,v) sẽ có giá trị không tại các điểm này. Vì thế, ảnh gốc sẽ không thể khôi phục lại được tại các tần số (u,v) đó. Vậy làm thế nào để vượt qua khó khăn này? có thể được vì chỉ cần có tác động nhỏ vào phương trình (2.8) thì các điểm không của H(u,v) sẽ khác với các điểm không của G(u,v). Có nghĩa là chúng ta phải cộng thêm một lượng tạp nhiễu nhỏ ( , )x y vào như trong phương trình (2.4). Khi đó sẽ thu được phương trình (2.7) và biến đổi Fourier của ảnh không hư hại tìm được dưới dạng :

' ( , ) ( , ) ( , ) ( , ) ( , ) F u v N u v F u v H u v H u v   (2.10)

Như vậy nếu biết được hàm hư hại h(x,y), tạp nhiễu cộng thêm ( , )x y và tính được biến đổi Fourier của ảnh hư hại '

( , )

F u v ta có thể xác định được biến đổi Fourier của ảnh không bị hư hại F u v( , )và từ đó khôi phục ảnh gốc không bị hư hại f(x,y) bằng cách lấy biến đổi nghịch đảo F(u,v). Trong phương pháp này lại đặt ra một vấn đề mới; đó là vì H(u,v) có thể có giá trị không hoặc thậm chí rất nhỏ thì tạp nhiễu có thể được khuếch đại cực lớn. Vậy làm thế nào để tránh không khuếch đại tạp nhiễu tại các tần số này ? Thông thường, hàm H(u,v) giảm rất nhanh khi ra ngoài gốc tọa độ, trong khi hàm N(u,v) lại gần như hằng số. Do đó, nếu dùng một hàm cửa sổ cắt hàm H(u,v) trước khi nó có giá trị bằng không rất nhỏ; khi đó tỉ số thứ hai trong (2.10) sẽ có giá trị

-28-

rất nhỏ và vì vậy ta sẽ tránh được hiện tượng làm tăng tạp nhiễu. Hàm hư hại H đôi khi được gọi là hàm truyền quang học (OTF: Optical Transfer Function). Trong lĩnh vực không gian, hàm H(x,y) được gọi là hàm mở rộng điểm (PSF: Point Spread Function).

Hàm mở rộng điểm hay hàm hư hại(PSF) đóng vai trò rất quan trọng. Dựa vào mô hình PSF này, ta có thể xác định một cách chính xác nguyên nhân gây hư hại ảnh và do đó có thể khôi phục ảnh hoàn hảo nhất.

2.2.2. Các phương pháp khôi phục ảnh mờ

Có ba phương pháp để khôi phục lại những ảnh bị mờ, hư hại và tạp

nhiễu đó là: phương pháp lọc ngược nhờ dùng các bộ lọc bình phương tối thiểu có điều kiện; lọc dùng bộ lọc Wiener; lọc ngược dùng thuật toán Lucy – Richardson.

a. Khôi phục ảnh nhờ lọc bình phương tối thiểu

Phương pháp này sử dụng bộ lọc bình phương tối thiểu để loại bỏ hư hại và tạp nhiễu cộng thêm vào ảnh gốc f(x,y) theo phương trình:

g = Hf+n

trong đó H là hàm hư hại nhân chập với ảnh gốc theo công thức:

-1 -1 0 0 1 ( , ) * ( , ) ( , ) ( - , - ) M N m n h x y f x y f m n h x m y n MN      (2.11)

Từ một xác định của ảnh f, để khôi phục lại ảnh hoàn hảo thì sai số xác định phải có giá trị nhỏ nhất; có nghĩa là đạo hàm bậc hai (Laplacian) của ảnh khôi phục f(x,y) phải bằng không. Đây chính là điều kiện để thỏa mãn phương trình:

2 2 '

gHfn (2.12)

trong đó f’ là một phiên bản xác định của ảnh f(x,y).

-29- 2 2 2 ( , ) 1 ( , ) ( , ) ( , ) ( , ) ( , ) H u v F u v G u v H u v H u vHP u v           (2.13)

Trong đó là một tham số điều chỉnh để điều kiện bình phương tối thiểu được thỏa mãn tốt nhất; còn P u v( , ) là biến đổi Fourier của hàm toán tử Laplace của một ảnh rời rạc tại vị trí pixels (m,v) được xác định bởi hệ thức :

2 ( , ) ( 1, ) ( , 1) ( 1, ) ( , 1) 4 ( ( , )) f m n f m n f m n f m n f m n f f m n           (2.14) hoặc dưới dạng ma trận 0 1 0 ( , ) 1 4 1 0 1 0 P m n           

Trong hộp công cụ của Matlab, hàm deconvreg với cú pháp :

g = deconvreg(f,PSF,noisepower,range)

thực hiện lọc ngược để khôi phục ảnh f từ ảnh bị hư hại g, do hàm PSF và do

tạp nhiễu cộng thêm noisepowwer với công suất xác định; giá trị mặc đinh

của công suất tạp nhiễu là 0. Noisepower thường được chọn bằng tích của kích thước của ảnh với tổng bình phương của phương sai và toàn phương trung bình của tạp nhiễu; tức là

noisepower = (size f( )n2 n2); (2.15)

còn tham số range là miền các giá trị mà ở đấy thuật toán bình phương tối thiểu được giới hạn để xác định giá trị của . Giá trị mặc định đối với rang là [10-9. 109]. Thuật toán này là thuật toán tối ưu có điều kiện theo nghĩa sai số bình phương tối thiểu giữa phiên bản xác định và ảnh gốc với yêu cầu bảo toàn độ trơn của ảnh.

b. Khôi phục ảnh sử dụng bộ lọc Wiener

Bộ lọc Wiener là bộ lọc tuyến tính tối ưu rất được ưa chuộng để khôi phục lại ảnh khi các đặc trưng tần số của ảnh và của tạp nhiễu đã được xác định. Bộ lọc này hoạt động theo phương pháp xác định một phiên bản sao cho

-30-

sai số toàn phương trung bình tối thiểu có giá trị hội tụ về không gian nhanh nhất. Hàm sai số thống kê này được xác định từ phương trình:

 2   ' 2

( , ) ( , ) - ( , ) min

E e x yE f x y f x y   (2.16)

Trong đó E là giá trị kỳ vọng; f(x,y) là ảnh không bị hư hại; f x y'( , )là một phiên bản xác định của ảnh không bị hư hại. Phương trình (2.16) được giải với giả thiết ảnh đúng f x y( , )không tương quan với tập nhiễu n(x,y) và ít nhất một trong hai có trung bình bằng không. Trên lĩnh vực tần số, lời giải của bài toán lọc Wiener tìm được dưới dạng:

2 2 ( , ) 1 ( , ) ( . ) ( , ) ( , ) n( , ) / f( , ) H u v F u v G u v H u v H u v S u v S u v           (2.17) Trong đó: ( , )

F u v là biến đổi Fourier của ảnh cần khôi phục

( , )

H u v là hàm truyền hư hại

2 ( , ) H u v = * ( , ) H u v H u v( , ) 2 ( , ) ( , ) n

S u vN u v là phổ công suất tạp nhiễu

2

( , ) ( , )

f

S u vF u v là phổ công suất của ảnh không bị hư hại

Tỉ số S u vn( , ) /S u vf( , ) được gọi là tỉ số công suất tạp nhiễu trên tín hiệu. Nếu tỉ số công suất tạp nhiễu trên tín hiệu bằng không thì bộ lọc Wiener trở thành bộ lọc ngược thông thường. Cần lưu ý rằng ảnh f(x,y) là chưa biết; và do vậy tính chất thống kê của nó có thể cũng chưa biết. Trong trường hợp đó, ta có thể thay thế tỉ số S u vn( , ) /S u vf( , ) bằng một tham số  và thay đổi giá trị của  để tìm một giá trị đúng.

Trong bộ lọc Wiener còn có hai thông số rất được quan tâm đó là công suất tạp nhiễu và công suất tín hiệu trung bình được định nghĩa bằng các hệ thức tương ứng sau:

-31- 1 n( , ) u v N S u v MN   (2.18) và 1 f( , ) u v F S u v MN   (2.19)

Trong đó M và N là kích thước thẳng đứng và kích thước ngang của ảnh

và của tạp nhiễu.

Các đại lượng này là những hằng số vì vậy tỉ số:

N R

F

 (2.20)

cũng là một hằng số và đôi khi được sử dụng để phát ra một mảng hằng số thay cho tỉ số S u vn( , ) /S u vf( , ). Trong trường hợp này, ngay cả khi tỉ số tạp nhiễu trên tín hiệu chưa biết, nhưng ta vẫn có thể khôi phục bằng cách thay đổi định tính hằng số này và xem kết quả khôi phục. Việc thay thế tỉ số tạp nhiễu trên tín hiệu bằng một mảng hằng số trong phương trình lọc hình thành một bộ lọc mới; đó là bộ lọc Wiener tham số.

Trong trường hợp nếu tạp nhiễu không có mặt nghĩa là ảnh gốc bị hư hại chỉ do quá trình hư hại với hàm mở rộng PSF gây ra thì tỉ số S u vn( , ) /S u vf( , )

bằng không, có nghĩa là bộ lọc Wiener trở thành bộ lọc lý tưởng.

Trong MATLAB, việc khôi phục ảnh nhờ bộ lọc Wiener được thực hiện

nhờ hàm deconvwnr với cú pháp:

g = deconvwnr(f,PSF)

Hàm khôi phục lại ảnh f từ ảnh hư hại do quá trình hư hại PSF gây ra và có thể do cả tạp nhiễu cộng thêm vào. Như đã nói ở trên, thuật toán này sử dụng phương pháp sai số toàn phương trình bình tối thiểu giữa ảnh hư hại và ảnh gốc, sử dụng ma trận tương quan giữa ảnh và tạp nhiễu. Khi tạp nhiễu bằng không, bộ lọc Wiener trở thành bộ lọc ngược lý tưởng.

Nếu công suất tạp nhiễu khác không thì sự khôi phục ảnh dùng bộ lọc Wiener được thực hiện nhờ lệnh

-32-

g = deconvwnr(f,PSF,NSR)

ở đây NSR là tỉ số công suất tạp nhiễu trên tín hiệu. NSR có thể là hằng số hoặc một mảng có cùng kích thước như ảnh f. NSR mặc định là 0.

Nếu ảnh khôi phục có các đường viền quá sắc nét do biến đổi Fourier rời rạc đưa vào, thì ta phải dùng hàm edgetaper trước khi gọi hàm deconvwnr. Hàm này làm mờ các đường biên của ảnh.

c. Khôi phục ảnh sử dụng thuật toán Lucy – Richardson

Khôi phục ảnh nhờ thuật toán Lucy – Richardson là phương pháp được

Một phần của tài liệu Xử lý ảnh mờ và xây dựng chương trình ứng dụng (Trang 28)