Các khái niệm cơ bản
Định nghĩa về ảnh kĩ thuật số và phục hồi ảnh
Ả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ố
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 của máy.
Vì sao cần xử lý hình ảnh
Trong các dạng truyền thông cơ bản: lời nói, văn bản, hình ảnh, âm thanh … thì hình ảnh là dạng truyền tải thông tin mạnh mẽ nhất
Hình ảnh thu nhận từ các bộ cảm biến thường gặp phải sai lệch và mất mát thông tin Để khắc phục điều này, chúng ta cần chuyển đổi hình ảnh thành định dạng số, gọi là ảnh số, để máy tính có thể thực hiện các phân tích và phục hồi Việc xử lý ảnh trên máy tính không chỉ giúp phân tích mà còn phục hồi thông tin bị sai lệch trong quá trình thu nhận.
Hình 1: Quá trình xử lý ảnh
Độ phân giải hình ảnh
Xử lý ảnh Ảnh ban đầu
Kết luận Ảnh "tốt hơn"
Khái niệm "Resolution" hay độ phân giải đề cập đến lượng thông tin trong một bức ảnh kỹ thuật số, được thể hiện trên các thiết bị hoặc in ra, thường được đo bằng pixel Độ phân giải cao mang lại khả năng hiển thị ảnh mượt mà và chi tiết hơn, với nhiều pixel mà mắt người khó có 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ố.
Độ tương phản hình ảnh
Độ tương phản là chỉ số thể hiện sự khác biệt về độ sáng giữa đối tượng và nền, phản ánh mức độ nổi bật của điểm ảnh hoặc vùng ảnh so với môi trường xung quanh.
Ví dụ về thông số độ tương phản: 1000:1 hay 3000:1,… Có nghĩa là điểm ảnh sáng gấp 1000 lần hay 3000 lần lúc chính điểm ảnh đó ở mức tối nhất.
Mẫu bị nhiễu
Nhiễu trong ảnh kỹ thuật số chủ yếu xuất phát từ quá trình thu nhận ảnh và đường truyền Chất lượng cảm biến hình ảnh chịu ảnh hưởng từ nhiều yếu tố, bao gồm điều kiện môi trường và chất lượng các bộ phận cảm biến Ví dụ, trong việc thu nhận ảnh bằng camera CDD, mức sáng và cảm biến nhiệt độ là những yếu tố quan trọng gây ra nhiễu Đường truyền ảnh cũng có thể bị hỏng do nhiễu, đặc biệt là khi sử dụng mạng lưới vô tuyến, nơi ánh sáng và nhiễu loạn không khí có thể làm giảm chất lượng hình ảnh.
Ước lượng hàm suy giảm
Có 3 cách chính để ước lượng hàm suy giảm trong việc phục hồi ảnh:
Các phương pháp phục hồi ảnh được mô tả chi tiết trong từng phần Quá trình này sử dụng hàm suy giảm để ước lượng, áp dụng các kỹ thuật giải mã mù, do hàm suy giảm thường không được biết đến hoàn toàn.
1.7.1 Ước lượng bằng quan sát hình ảnh
Để ước lượng hàm suy giảm H từ một ảnh bị suy giảm, chúng ta có thể khai thác thông tin từ chính bức ảnh đó Khi ảnh bị mờ, việc phân tích các khu vực nhỏ với cấu trúc đơn giản như đối tượng và nền là cần thiết Để giảm thiểu nhiễu, cần xác định những khu vực có tín hiệu mạnh Bằng cách sử dụng mức xám của đối tượng và nền xung quanh, chúng ta có thể tái tạo lại ảnh bị mờ với kích thước và đặc trưng tương tự như đối tượng quan sát trong tiểu cảnh.
Kí hiệu quan sát tiểu cảnh được thực hiện thông qua hàm và việc dựng vùng tiểu cảnh là một ước tính về khu vực trong ảnh gốc Giả sử rằng hiệu ứng của nhiễu là không đáng kể do chúng ta chọn khu vực có tín hiệu mạnh, điều này được thể hiện qua phương trình ̂.
Dựa vào đặc trưng của hàm, chúng ta có thể xây dựng một hàm đầy đủ h(u,v) bằng cách giả định vị trí không thay đổi Chẳng hạn, nếu biểu đồ xuyên tâm 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ể tận dụng toàn bộ thông tin để tạo ra hàm h(u,v) trên quy mô lớn, miễn là có mẫu tương tự.
1.7.2 Ước lượng bằng thí nghiệm
Khi thiết bị ảnh suy giảm có sẵn, cần ước lượng chính xác hàm suy giảm để duy trì phản ứng xung lực của nó Việc sử dụng ảnh có xung (chấm sáng nhỏ) trong cùng hệ thống là rất quan trọng Cần lưu ý rằng sự tuyến tính và hệ thống không gian bất biến được mô tả hoàn thiện thông qua chính phản ứng xung lực.
Xung lực được biểu diễn qua những chấm sáng, giúp giảm thiểu hiệu ứng nhiễu Điều này dẫn đến việc cần nhắc lại phép biến đổi chuỗi Fourier của xung lực, được coi là hằng số trong phương trình sau:
Với g(u,v) là phép biến đổi chuỗi Fourier của ảnh quan sát và hằng số mô tả độ lớn của xung lực, hình ảnh sau sẽ minh họa ví dụ về việc ước lượng hàm suy giảm dựa trên đặ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 trong nhiều năm do sự mờ nhạt của các vật thể bên trong ảnh cần được phục hồi Trong một số trường hợp, sự suy giảm này có thể do điều kiện môi trường gây ra Một ví dụ tiêu biểu về mô hình 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, với hàm tương tự.
Hằng số k phụ thuộc vào sự hỗn loạn của không khí, và lũy thừa 5/6 khiến phương trình này có hình thức tương tự như bộ lọc thông thấp Gauss Bộ lọc thông thấp Gauss đã từng được sử dụng như một mô hình nhẹ với mẫu mờ Hình ảnh dưới đây minh họa sự mờ của ảnh với các giá trị k= 0.0025 (nhiễu loạn nghiêm trọng) và k=0.001 (nhiễu loạn trung bình).
Tất cả các ảnh đều có kích thước 480x480 pixels, với k=0.00025 cho mức độ nhiễu loạn thấp Ảnh gốc đầu tiên được chụp từ NASA, và mô hình đã mô tả rõ ràng nhiễu loạn không khí.
Định nghĩa chuỗi Fourier và phép biến đổi chuỗi Fourier
Chuỗi Fourier, được đặt theo tên nhà toán học Joseph Fourier, là phương pháp biểu diễn một hàm tuần hoàn thông qua tổng của các hàm tuần hoàn khác.
Chuỗi Fourier là mở rộng trực giao của tín hiệu tuần hoàn với chu kì Tín hiệu tuần hoàn với chu kì có thể được biểu diễn như sau :
Với được gọi là hệ số Fourier của tín hiệu Hệ số được tính như sau :
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 tín hiệu tuần hoàn có giá trị thực, thì tính chất liên hợp phức sẽ được thỏa mãn Điều này có nghĩa là * biểu thị cho liên hợp phức Chúng ta có thể tính hệ số âm bằng cách lấy liên hợp phức của hệ số dương Từ kết quả này, chúng ta có thể nhận thấy rõ ràng.
1.8.2 Phép biến đổi Fourier 2 chiều
Biến đổi Fourier là phương pháp biểu diễn ảnh thông qua tổng hợp các lũy thừa phức của các thành phần biên độ, tần số và pha khác nhau Đối với hàm f(m,n) là hàm của hai biến không gian rời rạc m và n, biến đổi Fourier hai chiều của f(m,n) được định nghĩa như sau:
Nếu f(m,n) biểu diễn độ sáng của ảnh X tại vị trí pixel (m,n), thì F(w1,w2) là biến đổi Fourier của ảnh X Vì dữ liệu trên máy tính được lưu trữ dưới dạng rời rạc, cụ thể là ảnh được tổ chức theo đơn vị pixel, nên phép biến đổi Fourier cần được áp dụng cho từng pixel trong ảnh.
Biến đổi Fourier có thể đượ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 xác định như sau.
Biến đổi DFT được biểu diễn bởi các hệ số F(p,q), trong đó chúng ta chủ yếu sử dụng các hàm fft2 và ifft2 trong xử lý ảnh Cú pháp của hàm là Ft2(X,mrows,ncols) và f=ifft2(F,mrows,ncols) Nếu kích thước ảnh ban đầu nhỏ hơn yêu cầu, Matlab sẽ tự động thêm pixel 0 Sau khi thực hiện biến đổi DFT qua fft2, thành phần DC sẽ xuất hiện ở góc trên bên trái của ảnh, và có thể sử dụng hàm fftshift để di chuyển thành phần DC này về trung tâm ảnh.
1.8.3 Phép biến đổi DCT 2 chiều
Biến đổi DCT (Discrete Cosine Transform) giúp biểu diễn ảnh thông qua tổng các cosine với các thành phần biên độ và tần số khác nhau Thông tin chính của ảnh chủ yếu tập trung trong một số hệ số DCT, trong khi các hệ số còn lại thường chứa ít thông tin Biến đổi DCT 2 chiều được áp dụng cho ma trận A kích thước M x N.
Phép biến đổi DCT thuận và nghịch được thực hiện thông qua các hàm dtc2 và idtc2, sử dụng thuật toán FFT để tối ưu hóa tốc độ tính toán.
Đoạn mã Matlab dưới đây thực hiện phép biến đổi Fourier rời rạc 1 chiều cho một ảnh đơn giản: đầu tiên, tạo một ảnh kích thước 30x30 với các giá trị bằng 0, sau đó gán giá trị 1 cho các pixel trong khoảng từ hàng 5 đến hàng 24 và cột 13 đến cột 17 Cuối cùng, hiển thị ảnh gốc bằng lệnh subplot và imshow, với tiêu đề 'Ảnh gốc'.
F = fft2(f); % Bien doi DFT voi kích thuoc 30x30
F2 = log(abs(F)); subplot(1,4,2),imshow(F2,[-1 5]); 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');
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:
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 >g=medfilt2(f,[m,n],padopt); trong đó padopt có thể là “zeros”, “symmetric”,
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:
Phép dịch phổ để đưa giá trị F(0,0) về trung tâm:
>>F2tshift(f) ; Để quan sát quan phổ ta sử dụng hàm imshow, lưu ý là phổ biên độ:
Ta còn có hàm ifft2 là phép biển đổi Fourier 2 chiều ngược:
Và hàm ifftshift đưa điểm vị trí trung tâm về góc trái trên cùng quang phổ:
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 ma trận dữ liệu X và ma trận bản đồ màu map, trong đó 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 chứa các giá trị dấu phẩy động từ 0 đến 1, với mỗi hàng biểu thị giá trị red, green và blue của một màu đơn Ảnh chỉ số áp dụng ánh xạ trực tiếp giữa giá trị pixel và giá trị trong bản đồ màu Màu sắc của mỗi pixel được xác định thông qua giá trị tương ứng của X ánh xạ tới chỉ số trong bản đồ màu, trong đó giá trị 1 tương ứng với hàng đầu tiên và giá trị 2 tương ứng với hàng thứ hai.
Khi sử dụng hàm imread để đọc ảnh, một bản đồ màu thường được nạp tự động cùng với ảnh Tuy nhiên, người dùng không bị giới hạn vào bản đồ màu mặc định, mà có thể lựa chọn bất kỳ bản đồ màu nào theo ý thích.
1.10.2 Ảnh cường độ (Intensity Images)
Ảnh cường độ là ma trận dữ liệu ảnh I, trong đó giá trị của nó thể hiện cường độ tại các vùng khác nhau của ảnh Trong Matlab, ảnh cường độ được lưu trữ dưới dạng ma trận đơn, với mỗi phần tử đại diện cho một pixel Ma trận này có thể thuộc các lớp dữ liệu như double, uint8 hoặc uint16 Mặc dù ảnh cường độ thường không được lưu với bản đồ màu, Matlab vẫn sử dụng bản đồ màu để hiển thị chúng.
Trong ma trận cường độ, các phần tử biểu thị các mức độ cường độ khác nhau hoặc độ xám Điểm có cường độ 0 được thể hiện bằng màu đen, trong khi cường độ 1.255 hoặc 65.535 thường tương ứng với cường độ cao nhất, tức là 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
Ảnh RGB, hay còn gọi là true-color, được lưu trữ trong Matlab dưới dạng mảng dữ liệu 3 chiều, xác định giá trị màu đỏ, xanh lá cây và xanh dương cho từng pixel Không giống như các định dạng sử dụng bảng màu, ảnh RGB xác định màu sắc của mỗi pixel dựa trên sự kết hợp của các giá trị R, G, B Định dạng file đồ họa cho ảnh RGB tương tự như ảnh 24 bits, trong đó các kênh màu R, G, B chiếm các bit tương ứng.
Mỗi ảnh 8 bit cho phép hiển thị 16 triệu màu khác nhau Mảng RGB có thể thuộc các loại dữ liệu như double, uint8 hoặc uint16 Trong mảng RGB kiểu double, giá trị của mỗi thành phần màu nằm trong khoảng từ 0 đến 1 Một pixel có thể có thành phần màu được biểu diễn dưới dạng (0, 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,
Để xác định màu sắc của pixel tại vị trí hàng 2 và cột 3, ta cần tham khảo bộ ba giá trị RGB được lưu trữ tại (2, 3, 1:3) Cụ thể, nếu (2, 3, 1) có giá trị 0.5176, (2, 3, 2) có giá trị 0.1608 và (2, 3, 3) có giá trị 0.0627, thì màu sắc của pixel tại (2, 3) sẽ được biểu diễn dưới dạng (0.5176, 0.1608, 0.0627).
Những phép biến đổi hình học
Các phép biến đổi hình học là các thao tác cơ bản trong xử lý ảnh, giúp chuyển đổi vị trí của các điểm ảnh từ vị trí này sang vị trí khác trong ảnh mới Những phép toán này bao gồm các hoạt động như quay, thay đổi kích thước và cắt một phần của ảnh.
Nội suy là quá trình ước lượng giá trị của pixel tại điểm nằm giữa hai pixel đã biết, thường được sử dụng khi thay đổi kích thước ảnh để xác định giá trị cho các pixel mới Phép nội suy không chỉ quan trọng trong việc thay đổi kích thước mà còn là cơ sở cho các biến đổi hình học khác như quay ảnh Trong Image Processing Toolbox, có ba phương pháp nội suy chính: 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 nội suy đều tuân theo nguyên tắc chung là xác định giá trị của một pixel bằng cách tìm điểm tương ứng trong ảnh gốc Giá trị của pixel trong ảnh mới được tính bằng trung bình có trọng số của các pixel lân cận, trong đó trọng số phụ thuộc vào khoảng cách tới điểm đã xác định.
Phương pháp lân cận gần nhất gán giá trị cho pixel mới dựa trên pixel tương ứng trong ảnh gốc, trong khi phương pháp song tuyến tính sử dụng trung bình có trọng số của các pixel trong lân cận 2x2 Phương pháp bicubic nâng cao chất lượng bằng cách tính trung bình có trọng số của các pixel trong lân cận 4x4 Mặc dù phương pháp lân cận gần nhất là đơn giản và nhanh chóng, nhưng chất lượng hình ảnh không cao bằng hai phương pháp còn lại Việc sử dụng nhiều pixel hơn để tính trọng số sẽ cải thiện chất lượng hình ảnh, nhưng cũng sẽ kéo dài thời gian xử lý.
Phương pháp đầu tiên là phương pháp duy nhất có thể áp dụng cho mọi kiểu ảnh và dữ liệu mà không làm thay đổi giá trị của các pixel Các phương pháp khác không phù hợp với ảnh indexed, nhưng lại thích hợp cho ảnh RGB để đảm bảo chất lượng Đối với ảnh RGB, nội suy được thực hiện riêng biệt trên ba mặt phẳng màu đỏ, xanh lam và xanh lục Khi sử dụng nội suy song tuyến tính hoặc bicubic cho ảnh nhị phân, cần chú ý đến kiểu dữ liệu, vì pixel mới có thể có giá trị khác 0 và 1 Nếu ảnh gốc là kiểu double, ảnh mới sẽ là ảnh trắng đen kiểu double; nếu ảnh gốc là kiểu uint8, ả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 dùng thay đổi kích thước ảnh một cách linh hoạt, đồng thời cung cấp tùy chọn để xác định phương pháp nội suy và bộ lọc chống aliasing phù hợp.
Dòng lệnh trên tạo ra một ảnh mới b có kích thước gấp m lần ảnh gốc a Phương pháp nội suy được xác định qua chuỗi 'nearest' (lân cận gần nhất), 'bilinear' (song tuyến tính) hoặc 'bicubic', với 'nearest' là phương pháp mặc định Ngoài việc xác định tỷ số m, người dùng có thể chỉ định trực tiếp kích thước ảnh mới theo đơn vị pixel bằng cú pháp tương ứng.
Mrows và mcols đại diện cho số hàng và số cột của hình ảnh mới Người dùng có thể xác định kích thước của bộ lọc chống aliasing, với kích thước mặc định là 11x11, hoặc cung cấp đáp ứng xung h của bộ lọc theo các cú pháp đã nêu.
>> b = imresize( ,method,N) % Dùng bộ lọc kích thước NxN
>> b = imresize( ,method,h) % Dùng bộ lọc có đáp ứng xung h
Ví dụ: Tăng kích thước ảnh lên 1,25 lần dùng phương pháp bicubic với bộ lọc chống aliasing bậc 5:
J = imresize(I,1.25,'bicubic',5);imshow(I) figure, imshow(J) Ảnh gốc Ảnh sau khi tăng kích thước
1.11.3 Phép quay ảnh Để thực hiện các phép quay ảnh, ta có thể sử dụng hàm imrotate Ngoài hai thông số cơ bản là ảnh gốc và góc quay, người sử dụng cũng có thể xác định phương pháp nội suy sẽ dùng, và kích thước của ảnh mới (đủ lớn để chứa ảnh mới hay chỉ bằng kích thước ảnh cũ).Thông số mặc định là ‘nearest’ (lân cận gần nhất) 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
Ví dụ : Quay ảnh đi một góc 35 ° , dùng phương pháp nội suy song tuyến tính:
K = imrotate(I,35,'bilinear','crop'); subplot(1,3,1),imshow(I) subplot(1,3,2), imshow(J) subplot(1,3,3), imshow(K) Ảnh gốc Ảnh quay góc 35 0 Giữ nguyên kích thước
Để trích xuất một phần của ảnh gốc, bạn có thể sử dụng hàm imcrop Khi sử dụng hàm này, có hai lựa chọn: xác định vị trí cụ thể của phần ảnh cần trích xuất bằng cách cung cấp thông số vị trí hoặc sử dụng chuột để chọn phần ảnh mong muốn.
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
Rect được định nghĩa dưới dạng [Xmin Ymin width height], trong đó (Xmin, Ymin) là tọa độ của góc trên bên trái của vùng ảnh cần trích xuất, còn width và height lần lượt là chiều rộng và chiều cao của vùng ảnh đó.
Khi sử dụng phương pháp thứ hai, 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 thành hình chữ thập, cho phép người dùng kéo chuột để chọn phần ảnh cần trích và sau đó thả chuột Hàm imcrop sẽ trả về phần ảnh nằm trong vùng được xác định bởi vị trí chuột.
Nếu không cung cấp thông số ảnh gốc, hàm imcrop sẽ tự động chọn ảnh trên hệ trục tọa độ hiện tại Khi xác định bằng chuột, người dùng có thể lấy 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 kết quả đầu ra từ hàm này.
1.11.5 Thực hiện phép biến đổi hình học tổng quát
MATLAB không chỉ hỗ trợ các phép biến đổi hình học cụ thể mà còn cho phép người dùng thực hiện các biến đổi tùy chỉnh thông qua hàm imtransform Để áp dụng một phép biến đổi hình học, người dùng cần cung cấp ảnh đầu vào A và cấu trúc biến đổi hình học TFORM.
Hàm imtransform trong MATLAB được sử dụng với cú pháp [B,XData,YData] = imtransform( ,param1,val1,param2,val2, ), trong đó 'interp' là chuỗi xác định phương pháp nội suy (XData,YData) chỉ định vị trí của ảnh B trong hệ tọa độ X-Y Ngoài ra, người dùng có thể cung cấp các cặp thông số (tên thông số/giá trị thông số) để tùy chỉnh các thông số của phép biến đổi Để tìm hiểu thêm về các thông số này, bạn có thể sử dụng lệnh help imtransform trong cửa sổ lệnh của MATLAB.
Mô hình toán cho bài toán phục hồi ảnh
Sự suy giảm hàm H Hàm lọc phục hồi ̂ Trong đó: là ảnh đầu vào là pixel bị nhiễu ŋ (x,y) là hàm gây nhiễu ̂ là ảnh đầu ra
Một số hàm nhiễu cơ bản và cách thêm nhiễu vào ảnh
Hàm nhiễu Gauss
Hàm phân phối xác suất (PDF) của nhiễu Gaus được xác định bởi công thức:
Trong đó: z là mức xám, là giá trị trung bình của z và là độ lệch chuẩn ( là phương sai)
Với 70% giá trị z trong khoảng [(
Tạo nhiễu Gaussian với a là mean, b là độ lệch chuẩn, là kích thước ảnh (default a=0,b=1)
I=imread('eight.tif'); % Read in image
Ig = imnoise(I,'gaussian',0.02); % add Gaussian noise (with 0.02 variance) imshow(Ig)
Nhiễu Gaussian là một loại nhiễu trắng lý tưởng, xuất phát từ các dao động ngẫu nhiên của tín hiệu Nó được đặc trưng bởi việc có phân bố chuẩn, làm cho nhiễu Gaussian trở thành một khái niệm quan trọng trong phân tích tín hiệu.
Nếu ta có ảnh I, nhiễu Gaussian là
N thì ta sẽ có ảnh nhiễu = I +N Để tạo ra ảnh với nhiễu Gaussian ta dùng câu lệnh sau :
Hàm nhiễu Salt và Pepper
Hàm phân phối xác suất (PDF) của nhiễu Salt và Pepper được xác định bởi công thức: {
Nếu b > a, mức xám b sẽ xuất hiện tương ứng là điểm sáng trên ảnh còn mức xám a sẽ tương ứng với điểm đen xuất hiện trên ảnh
Số lượng nhiễu được cộng vào mặc định là 10% Ta có thể cung cấp thêm các thông số để thay đổi lượng nhiễu được cộng vào này
I=imread('eight.tif'); % Read in image
Isp = imnoise(I,'salt & pepper'); % add 3% (0.03) salt and pepper noise imshow(Isp)
Để thêm nhiễu "Salt and Pepper" vào một bức ảnh, bạn có thể sử dụng câu lệnh: t = imnoise(image, 'salt & pepper') Nhiễu Salt và Pepper, còn được gọi là nhiễu xung hoặc nhiễu nhị phân, thường xuất hiện dưới dạng các điểm sáng và tối ngẫu nhiên trong hình ảnh.
Hàm nhiễu Speckle
Có thể được mô hình nhiễu Speckle bằng cách nhân các giá trị ngẫu nhiên với giá trị của các pixel
Trong Matlab ảnh với nhiễu Speckle được tính toán : I*(1 + N)
Nhiễu N có phân phối chuẩn với giá trị trung bình bằng 0 Để xác định giá trị kỳ vọng của nhiễu, có thể cung cấp thêm thông số, trong đó giá trị mặc định là 0.04.
Nếu tín hiệu hình ảnh là tín hiệu tuần hoàn, chúng ta có thể có ảnh bị ảnh hưởng bởi nhiễu tuần hoàn
I=imread('eight.tif'); % Read in image
Nhiễu Speckle là một vấn đề quan trọng trong các ứng dụng radar, và để thêm 4% nhiễu Speckle vào một bức ảnh, ta có thể sử dụng câu lệnh t = imnoise(image, 'speckle') Kết quả sẽ được hiển thị bằng lệnh imshow(Is).
Hàm nhiễu Poisson
Hàm phân phối xác suất (PDF) của nhiễu Poisson được xác định bởi công thức:
I=imread('eight.tif'); % Read in image
Ip = imnoise(I,poisson); % add poisson noise
Nhiễu Poisson phân bố rời rạc không đồng đều Để cộng nhiễu “Poisson” vào một ảnh ta dùng câu lệnh sau: t = imnoise(image,’Poisson’)
Hàm nhiễu Rayleigh
Hàm phân phối xác suất (PDF) của nhiễu Rayleigh được xác định bởi công thức:
Tạo nhiễu Rauleigh, với a là mean, b là độ lệch chuẩn , là kích thước ảnh (default a=0,b=1)
Hàm nhiễu Erlang(Gamma)
Hàm phân phối xác suất (PDF) của nhiễu Erlang(Gamma) được xác định bởi công thức: {
Tạo nhiễu Erlang(Gamma), là kích thước ảnh (default a=2,b=5) k=-1/a
Hàm nhiễu mũ (Exponential)
Hàm phân phối xác suất (PDF) của nhiễu mũ (Exponential) được xác định bởi công thức: {
Tạo nhiễu lũy thừa, là kích thước ảnh (default a=1) k=-1/a
Đây là trường hợp đặc biệt của Erlang PDF với b=1
Hàm nhiễu đều (uniform)
Hàm phân phối xác suất (PDF) của nhiễu đều(uniform) được xác định bởi công thức: {
Tạo nhiễu đều (uniform) , với a là mean, b là độ lệch chuẩn , là kích thước ảnh (default a=0,b=1)
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
Một số phương pháp giải và ví dụ
2.1 Phương pháp lọc trung bình
2.1.1 Kỹ thuật lấy giá trị trung bình số học f(x,y) ∑ là ma trận có tâm tại (x,y) có số hàng m, số cột n
Giá trị của ảnh khôi phục tại tọa độ (x,y) là trung bình số học của các pixel trong miền Sxy Bộ lọc này được thực hiện trong không gian màu IPT thông qua các hàm: w = fspecial("average", [m,n]) và f = imfilter(g,w).
Code trung bình số học:
%Mã Code Matlab cua ham loc trung binh so hoc:
%Go nhieu tu anh bi nhieu G
%Xu li cac diem anh bien bang cach lap lai gia tri bien
G1(end,end)=G(end,end); f1 = G1;%f1 la f-hat
%ap dung ki thuat lay trung binh so hoc voi Sxy co 3*3 for i = 2:m+1 for j = 2:n+1 f1(i,j) = (G1(i-1,j-1) + G1(i-1,j) + G1(i-1,j+1) +
G1(i+1,j-1) + G1(i+1,j) + G1(i+1,j+1))/9; end; end; f1 = f1(2:m+1,2:n+1); figure imagesc(f1),colormap(gray);
Hình ảnh trước xử lý Hình ảnh sau xử lý
2.1.2 Kỹ thuật lấy giá trị trung bình hình học g(x,y) → f(x,y) = (∏
Giá trị pixel của ảnh phục hồi được tính bằng cách lấy tích của các pixel trong miền Sxy, sau đó áp dụng lũy thừa 1/m.n Lưu ý rằng IPT không hỗ trợ hàm để thực hiện tính toán trực tiếp cho bộ lọc này.
Code trung bình hình học:
[m,n] = size(G); figure imagesc(G);colormap(gray);
%Go nhieu tu nh bi nhieu G
%Xu li cac diem anh bien bang cach lap lai gia tri bien
G1(end,end)=G(end,end); f1 = G1;%f1 la f-hat
%ap dung ki thuat lay trung binh hinh hoc voi Sxy co 3*3 for i = 2:m+1 for j = 2:n+1
G1(i+1,j-1)*G1(i+1,j)*G1(i+1,j+1))^(1/9); end; end; f1 = f1(2:m+1,2:n+1); figure imagesc(f1),colormap(gray);
Hình ảnh trước xử lý Hình ảnh sau xử lý
2.1.3 Kỹ thuật trung bình điều hòa ̂
Bộ lọc hàm điều hòa hiệu quả trong việc xử lý nhiễu Salt nhưng không phát huy tác dụng với nhiễu Pepper Ngoài ra, nó cũng có khả năng xử lý tốt các loại nhiễu khác như nhiễu Gauss.
Code trung bình điều hòa:
%Mã Code Matlab cua ham loc trung binh dieu hoa:
%Go nhieu tu anh bi nhieu G
%Xu li cac diem anh bien bang cach lap lai gia tri bien
G1(end,end)=G(end,end); f1 = G1;%f1 la f-hat
%ap dung ki thuat lay trung binh dieu hoa voi Sxy co 3*3 for i = 2:m+1 for j = 2:n+1 f1(i,j) = 9/(1/G1(i-1,j-1) + 1/G1(i-1,j) + 1/G1(i-1,j+1) +
1/G1(i+1,j-1) + 1/G1(i+1,j) + 1/G1(i+1,j+1)); end; end; f1 = f1(2:m+1,2:n+1); figure imagesc(f1),colormap(gray);
Hình ảnh trước xử lý Hình ảnh sau xử lý
Lọc trung bình số học, hình học và điều hòa là quy trình làm mượt ảnh bằng cách tính giá trị trung bình của các điểm ảnh lân cận, giúp giảm độ sắc nét so với ảnh gốc Quá trình này loại bỏ các thành phần nhiễu ngẫu nhiên, thường có mức xám khác biệt với các vùng lân cận Tuy nhiên, một hạn chế rõ ràng là tại các vị trí biên, nơi có sự thay đổi nhanh chóng của các mức xám, sẽ bị làm mờ, ảnh hưởng đến các bước tiếp theo trong xử lý ảnh.
31 thấy được các chi tiết nhỏ gần như đã bị loại khỏi ảnh, do đó có thể dễ dàng lấy được các thành phần có kích thước lớn
2.2 Phương pháp Lọc thống kê cấp bậc
Bộ lọc thay thế giá trị của một pixel bằng trị số trung bình của các giá trị mức xám trong khu vực lân cận, được xác định bởi Sxy Bộ lọc trung vị vượt trội hơn bộ lọc trung bình vì nó duy trì độ nét tần số cao trong khi vẫn loại bỏ nhiễu Quá trình này được thực hiện thông qua một hàm nhất định.
Bộ lọc trung vị là công cụ hiệu quả để xử lý các giá trị pixel bất thường, như nhiễu "Salt and pepper" Khi gặp phải những điểm nhiễu có mức xám khác biệt so với các pixel lân cận, bộ lọc này sẽ thay thế chúng bằng mức xám gần nhất của các điểm xung quanh, giúp cải thiện chất lượng hình ảnh.
Isp = imnoise(I,'salt & pepper'); % them 3% (0.03)nhieu salt va pepper
Ig = imnoise(I,'gaussian',0.02); % them nhieu Gaussian (voi 0.02 variance)
I_m = medfilt2(I,[3 3]); % ap dung cho anh goc
Isp_m = medfilt2(Isp,[3 3]); % ap dung cho anh nhieu salt va pepper
Ig_m =medfilt2(Ig,[3 3]); % ap dung cho anh nhieu Gauss subplot(1,3,1), imshow(I_m); title('loc anh goc'); subplot(1,3,2), imshow(Isp_m); title('loc salt and pepper'); subplot(1,3,3), imshow(Ig_m); title('loc gaussian');
Hình (1) là ảnh gốc ban đầu sau khi sử dụng hàm lọc Median
Hình (2) minh họa ảnh đã được thêm nhiễu "Salt và Pepper" và áp dụng hàm lọc Median để xử lý Hình (3) thể hiện ảnh với nhiễu "Gauss" sau khi cũng sử dụng hàm lọc Median.
2.2.2 Hàm lọc Max và Min
Bộ lọc Max rất hữu ích trong việc xác định điểm sáng nhất trong ảnh, giúp loại bỏ nhiễu Pepper có giá trị thấp Quá trình này cho phép chọn lọc mức sáng hiệu quả trong miền xác định.
Bộ lọc Min là công cụ hữu ích để xác định điểm tối nhất trong ảnh, giúp loại bỏ nhiễu Salt có giá trị thấp Quá trình này cho phép chọn mức tối trong miền xác định một cách hiệu quả.
Bộ lọc Max được thực hiện thông qua hàm:
Bộ lọc Min được thực hiện thông qua hàm:
( ) Code Matlab Bộ lọc Max:
Isp = imnoise(I,'salt & pepper'); % thêm 3% (0.03) nhieu salt va pepper
Ig = imnoise(I,'gaussian',0.02); % them nhieu Gaussian (voi 0.02 variance)
I_m = ordfilt2(I,25,ones(5,5)); % ap dung cho anh goc
Isp_m = ordfilt2(Isp,25,ones(5,5)); % ap dung cho anh nhieu salt va pepper
The image processing technique applied here involves using the `ordfilt2` function to filter images affected by Gaussian noise The code snippet demonstrates the filtering process with a 5x5 neighborhood, resulting in three subplots: the first displays the original image after applying the basic filter, the second shows the filtered image to remove salt-and-pepper noise, and the third presents the image filtered to mitigate Gaussian noise effects Each subplot is clearly labeled to indicate the type of filtering performed.
Hình (1) là ảnh gốc ban đầu sau khi sử dụng hàm lọc Max
Hình (2) là ảnh đã thêm nhiễu “Salt và Pepper” sau khi sử dụng hàm lọc Max
Hình (3) là ảnh đã thêm nhiễu “Gauss” sau khi sử dụng hàm lọc Max
Code Matlab của bộ lọc Min :
Isp = imnoise(I,'salt & pepper'); % them 3% (0.03) nhieu salt va pepper
Ig = imnoise(I,'gaussian',0.02); % them nhieu Gaussian (voi 0.02 variance)
I_m = ordfilt2(I,1,ones(5,5)); % ap dung cho anh goc
Isp_m = ordfilt2(Isp,1,ones(5,5)); % ap dung cho anh nhieu salt va pepper
The code snippet applies various filtering techniques to images affected by noise It utilizes the `ordfilt2` function to perform a Gaussian filter on the image `Ig`, using a 5x5 kernel The results are displayed in a subplot format, showcasing the original image, the salt and pepper filtered image, and the Gaussian filtered image, each with appropriate titles for clarity.
Hình (1) là ảnh gốc ban đầu sau khi sử dụng hàm lọc Min
Hình (2) là ảnh đã thêm nhiễu “Salt và Pepper” sau khi sử dụng hàm lọc Min
Hình (3) là ảnh đã thêm nhiễu “Gauss” sau khi sử dụng hàm lọc Min
2.2.3 Hàm lọc điểm chính giữa
Bộ lọc điểm chính giữa dùng để tính điểm trung bình giữa giá trị Min và Max trong vùng bao quanh bởi
Bộ lọc xử lí tốt với những nhiễu có phân phối ngẫu nhiên như nhiễu Gauss
Bộ lọc này được thực hiện thông qua hàm: ̂ [ { } { }]
Code Matlab bộ lọc điểm chính giữa:
Isp = imnoise(I,'salt & pepper'); % them 3% (0.03) nhieu salt va pepper
Ig = imnoise(I,'gaussian',0.02); % them nhieu Gaussian (voi 0.02 variance)
I_m = ordfilt2(I,13,ones(5,5)); % ap dung cho anh goc
Isp_m = ordfilt2(Isp,13,ones(5,5)); % ap dung cho anh nhieu salt va pepper
The code applies a Gaussian filter to an image using the `ordfilt2` function with a specified neighborhood size, enhancing the image by reducing noise The results are displayed in a subplot format, showcasing three images: the original image, the salt and pepper filtered image, and the Gaussian filtered image, each with appropriate titles for clarity.
Hình (1) là ảnh gốc ban đầu sau khi sử dụng hàm lọc điểm chính giữa
Hình (2) là ảnh đã thêm nhiễu “Salt và Pepper” sau khi sử dụng hàm lọc điểm chính giữa
Hình (3) là ảnh đã thêm nhiễu “Gauss” sau khi sử dụng hàm lọc điểm chính giữa
So sánh 2 phương pháp: Bộ lọc trung bình và bộ lọc trung vị
Bộ lọc trung bình và bộ lọc trung vị đều có khả năng cải thiện chất lượng ảnh đầu ra từ ảnh đầu vào bị nhiễu Tuy nhiên, mức độ cải thiện phụ thuộc vào loại bộ lọc và loại nhiễu trong ảnh Đặc biệt, đối với ảnh nhiễu Gauss, bộ lọc này mang lại kết quả tốt, giúp loại bỏ nhiễu hiệu quả.
Với ảnh bị nhiễu salt và pepper thì bộ lọc này sẽ cho đầu ra tốt (ảnh được
35 và làm trơn tốt) lọc nhiễu và làm trơn tốt) Điểm hạn chế Với ảnh không bị nhiễu
Gauss, mà bị nhiễu khác thì ảnh đầu ra chất lượng không được tốt
Với ảnh không bị nhiễu Salt và Pepper, mà bị nhiễu khác thì ảnh đầu ra chất lượng không được tốt
2.3 Phương pháp lọc tần số
2.3.1 Phương pháp lọc chắn dải
Bộ lọc chắn dải được sử dụng để loại bỏ hoặc làm suy hao các dải băng tần trong biến đổi chuỗi Fourier Nó cũng có khả năng loại bỏ nhiễu trong những ứng dụng khi tần số của nhiễu đã được xác định trước.
Bộ lọc này được thực hiện thông qua hàm:
Bộ lọc chắn dải thông thấp Buterworth:
Bộ lọc chắn dải Gaussian:
2.3.2 Phương pháp lọc thông dải
Bộ lọc thông dải loại bỏ nhiều chi tiết ảnh, hữu dụng trong việc tách ảnh hưởng của một dải tần số lên ảnh
Bộ lọc này được thực hiện thông qua hàm:
2.3.3 Phương pháp bộ lọc cắt đột ngột
Bộ lọc Notch loại bỏ hay cho qua những tần số lân cận xác định trước quanh tần số trung tâm
Bộ lọc này được thực hiện thông qua hàm:
Bộ lọc Notch chắn dải thông thấp Butterworth:
Bộ lọc Notch chắn dải Gaussian:
2.4 Phương pháp bộ lọc ngược
Bộ lọc ngược dùng để làm rõ ảnh bị mờ do chuyển động
Từ đó ta có thể khôi phục DFT của ảnh ban đầu: ̂
Một số thành phần của bộ lọc có kích thước rất nhỏ, dẫn đến phép chia tạo ra giá trị lớn, ảnh hưởng đến chất lượng ảnh đầu ra Do đó, việc thu được ảnh đầu ra giống với ảnh gốc trở nên khó khăn.
Các bước thực hiện phương pháp lọc ngược:
- Áp dụng một bộ thông thấp vào phép chia để loại bỏ những giá trị nhỏ của bộ lọc: ̂
- Chọn một ngưỡng giá trị d, nếu | ̂ | < d chúng ta sẽ không thực hiện phép chia nữa mà giữ lại giá trị ban đầu ̂ {