hỏng hoặc chất lượng của pixel nhận được biến đổi theo thời gian và vị trí. Bằng cách chỉ ra tham số mảng WEIGHT với hàm deconvlucy, ta có thể chỉ ra rằng những pixel nào đó trong ảnh bị bỏ qua. Để bỏ qua một pixel, gán một trọng lượng 0 tới một phần từ trong mảng WEIGHT tương ứng với pixel trong ảnh.
- Giải thuật hội tụ trên các giá trị đã đoán biết được với các pixel hỏng trên cơ sở của thông tin từ các pixel lân cận. Sự biến đổi trong đáp ứng phát hiện từ pixel tới pixel có thể được điều tiết bởi mảng WEIGHT. Thay cho việc gán một giá trị trọng lượng 1 tới các pixel tốt, ta có thể chỉ ra các giá trị và trọng lượng mà các pixel tuỳ thuộc vào lượng các flat-field correction
Điều khiển camera đọc hết nhiễu
- Nhiễu trong thiết bị CCD có hai thành phần chính: + Phôton kể đến nhiễu với một phân bố Poisson + Đọc toàn bộ nhiễu với phân bố Gauss
- Vòng lặp Lucy-Richardson thực chất nhận ra kiểu nhiễu đầu tiên. Ta phải nhận ra kiểu nhiễu thứ hai, nếu không nó có thể là nguyên nhân các pixel với các phôton tới ở mức thấp sẽ nhận giá trị âm.
- Hàm deconvlucy sử dụng tham số vào READOUT để điều khiển camera đọc toàn bộ nhiễu. Giá trị của tham số này điển hình là tổng của nhiễu tổng cộng và nhiễu nền. Giá trị của tham số READOUT chỉ ra một độ lệch đảm bảo rằng tất cả các giá trị đều dương.
Ví dụ: Sử dụng hàm deconvlucy để khử mờ một ảnh
- Để minh họa, ví dụ này sử dụng hàm deconvlucy, nó mô phỏng một ảnh bị mờ và nhiễu bằng cách convolve một bộ lọc Gauss với một ảnh (sử dụng hàm imfilter) và sau đó thêm nhiễu Gauss (sử dụng hàm imnoise).
1. Đọc một ảnh vào không gian làm việc. I = imread('board.tif');
I = I(50+[1:256],2+[1:256],:);
figure;imshow(I);title('Original Image');
2. Tạo hàm PSF để làm mờ ảnh
PSF = fspecial('gaussian',5,5);
3. Tạo mờ ảnh và thêm nhiễu vào ảnh
Blurred = imfilter(I,PSF,'symmetric','conv'); V =.002;
BlurredNoisy = imnoise(Blurred,'gaussian',0,V);
4. Sử dụng hàm devconlucy để khôi
phục ảnh gốc, chỉ ra hàm PSF được sử
dụng để tạo mờ và giới hạn số vòng lặp tới 5 (mặc định là 10) luc1 = deconvlucy(BlurredNoisy,PSF,5);
figure; imshow(luc1); title('Restored Image');
d - Sử dụng giải thuật trộn deconvolution
- Sử dụng hàm deconvblind để khử
mờ một ảnh. Giải thuật này có thể được sử
dụng hiệu quả khi không có thông tin
về mờ hoặc nhiễu được biết. Hàm
deconvblind khôi phục ảnh và PSF đồng thời, sử dụng một quá trình lặp tương tự như giải thuật Lucy-Richardson
- Hàm deconvblind chỉ giống như hàm deconvlucy, thi hành một vài sự điều hợp tới giải thuật Lucy-Richardson.
Ví dụ sau đây minh họa việc sử dụng hàm deconvblind. Nó sẽ tạo một ảnh giả mờ và sau đó dùng hàm này để khử mờ.
1. Đọc một ảnh vào không gian làm việc I = imread('cameraman.tif');
figure; imshow(I); title('Original Image');
2. Tạo hàm PSF để làm mờ ảnh
PSF =
fspecial('motion',13,45);
figure; imshow(PSF,[],'notruesize'); title('Original PSF');
Blurred = imfilter(I,PSF,'circ','conv');
figure; imshow(Blurred); title('Blurred Image');
4. Khử mờ ảnh, tạo một sự ước lượng ban
đầu cho kích thước của PSF
- Để quyết định kích thước của PSF, kiểm
tra ảnh mờ và đo chiều rộng của mờ (theo pixel) xung quanh một vật có hình dạng nhất định. Trong ảnh mờ mẫu, ta có thể đo mờ gần với đường viền tà áo của người đàn ông. Bởi vì kích thước của PSF là quan trọng hơn giá trị của nó, ta có thể chỉ ra một mảng toàn số 1 như là PSF ban đầu.
- Hình sau đây chỉ ra một sự khôi phục mà sự phỏng đoán ban đầu về kích thước của PSF là giống với kích thước của PSF đã gây ra mờ. Trong ứng dụng thực, ta có thể cần chạy lại hàm deconvblind, kiểm tra PSF với các kích thước khác nhau cho tới khi nhận được một kết quả ổn định. PSF được khôi phục trả lại bởi mỗi lần deconvolution có thể cung cấp một chỉ dẫn có giá trị cho kích thước tối ưu của PSF.
INITPSF = ones(size(PSF));
[J P]= deconvblind(Blurred,INITPSF,30); figure; imshow(J); title('Restored Image'); figure; imshow(P,[],'notruesize');
- Mặc dù hàm deconvblind có thể khử nhiễu ảnh tới một khoảng rất rộng, hiện tượng rung xung quanh vùng tương phản cường độ trong ảnh phục hồi là không ổn định. Bước tiếp theo trong ví dụ lặp lại quá trình khử mờ, cố gắng đạt tới một kết quả tốt hơn bằng cách:
+ Tránh vùng tương phản cao từ sự xử lý + Chỉ ra một giá trị PSF tốt hơn
5. Tạo một mảng WEIGHT để loại trừ vùng tương phản cao từ thao tác khử mờ. Điều này có thể làm giảm rung do tương phản như trong kết quả.
Để loại trừ một pixel từ sự xử lý, ta tạo một mảng có cùng kích thước với ảnh gốc và gán giá trị 0 cho các pixel trong mảng tương ứng với pixel trong ảnh gốc mà ta muốn loại bỏ. Để tạo một mảng WEIGHT, ví dụ sử dụng một sự kết hợp của việc phát hiện cạnh và xử lý hình thái học để phát hiện vùng có độ tương phản cao trong ảnh. Do mờ trong ảnh là tuyến tính, ví dụ mở rộng ảnh ra 2 lần. Để loại trừ các pixel thuộc vùng biên của ảnh (một vùng có độ tương phản cao) từ quá trình xử lý, ví dụ này sử dụng padarray để gán giá trị 0 tới tất cả các pixel trên biên ảnh:
WEIGHT = edge(I,'sobel',.28); se1 = strel('disk',1);
se2 = strel('line',13,45);
WEIGHT = padarray(WEIGHT(2:end-1,2:end-1),[2 2]); figure; imshow(WEIGHT); title('Weight Array');
6. Tinh chế giá trị đã ước lượng cho PSF.
PSF được xây dựng lại p được trả về từ lần truyền đầu tiên mà kết quả đạt được một độ tuyến tính khá tốt. Với lần truyền thứ hai, ví dụ này sử dụng một giá trị PSF mới p1 giống như p nhưng với biên độ nhỏ pixel thiết lập bằng 0
P1 = P;
P1(find(P1 < 0.01))=0;
7. Trả lại deconvolution, chỉ ra mảng WEIGHT và sửa giá trị PSF. Chú ý, ảnh phục hồi có ít rung xung quanh vùng có cường độ tương phản lớn hơn kết quả trước đây:
[J2 P2] = deconvblind(Blurred,P1,50,[],WEIGHT); figure; imshow(J2);
title('Newly Deblurred Image'); figure; imshow(P2,[],'notruesize'); title('Newly Reconstructed PSF');