PIC Vietnam

Go Back   PIC Vietnam > Robotics > Xử lý ảnh

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

Xử lý ảnh Các thuật toán xử lý ảnh dùng trong robot

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 17-04-2007, 01:43 AM   #1
thanh_nam1977
Đệ tử 2 túi
 
thanh_nam1977's Avatar
 
Tham gia ngày: Apr 2007
Nơi Cư Ngụ: Ho Chi Minh
Bài gửi: 27
:
Send a message via Yahoo to thanh_nam1977
Lọc nhiễu xung -Impulse Noise Filter

Nhiễu có thể tác động vào một bức ảnh bằng nhiều cách, bắt đầu tại bộ phận ống kính của máy ảnh và kết thúc tại bước số hoá bức ảnh đã chụp được. Do đó, mục tiêu của việc khôi phục ảnh trong đó bao gồm việc lọc nhiễu là để cải thiện chất lượng của một bức ảnh cho trước theo một hướng nào đó đã được xác định trước. Khôi phục là cố gắng xây dựng, tái thiết lại một bức ảnh đã bị giảm chất lượng bằng cách sử dụng vốn kiến thức đã biết trước
Ta sẽ khảo sát cách sử dụng các khả năng của MATLAB và IPT (Image Processing Toolbox) để mô hình hiện tượng suy giảm và đưa ra các giải pháp khôi phục ảnh.
Khả năng mô phỏng đặc điểm và các ảnh hưởng của nhiễu là trung tâm của việc khôi phục ảnh.

a.Cộng nhiễu với hàm imnoise
Toolbox sử dụng hàm imnoise để thêm nhiễu vào 1 ảnh. Hàm này có cú pháp cơ bản như sau:

g = imnoise(f, type, parameters)

trong đó f là ảnh ở ngõ vào, type là loại nhiễu sẽ được cộng vào ảnh f và parameters là các thông số liên quan đến loại nhiễu được cộng vào. Hàm imnoise chuyển đổi ảnh ngõ vào sang kiểu double trong phạm vi [0, 1] trước khi cộng nhiễu vào nó. Điều này phải được chú ý khi chỉ định các thông số nhiễu. Ví dụ, để cộng nhiễu Gaussian với trung bình 64 và phương sai 400 vào một ảnh kiểu unit8 thì chúng ta phải thay đổi giá trị trung bình thành 64/255 và phương sai thành 400/255 để đưa vào ngõ vào của hàm imnoise. Có nhiều loại nhiễu khác nhau tác động vào các bức ảnh, mỗi loại sẽ có trường type khác nhau nhưng vì tiểu luận này yêu cầu thực hiện việc lọc nhiễu xung tức là nhiễu dạng salt & pepper nên ta sẽ tập trung tìm hiểu cách cộng loại nhiễu này vào và lọc nó ra khỏi bức ảnh. Trước tiên, để cộng nhiễu xung vào một bức ảnh ta sử dụng hàm imnoise ở trên với cú pháp cụ thể như sau:

g = imnoise(f, ‘salt & pepper’, d)

sẽ cộng nhiễu salt và pepper vào ảnh f, trong đó d là mật độ nhiễu (nghĩa là phần trăm diện tích của ảnh chứa các giá trị nhiễu). Vì thế, xấp xỉ d*numel(f) pixel bị nhiễu tác động. Mật độ nhiễu mặc định là 0.05.

b.Tạo ra nhiễu ngẫu nhiên không gian với một hàm phân bố cụ thể:
Thông thường cần phải có khả năng tạo ra các loại nhiễu và các thông số không có trong hàm imnoise. Các giá trị của nhiễu không gian là các con số ngẫu nhiên, được miêu tả bởi một hàm mật độ xác suất (PDF) hoặc một cách tương đương bởi hàm phân bố tích luỹ (CDF) tương ứng. Sự tạo ra số ngẫu nhiên cho các loại phân bố mà chúng ta quan tâm tuân theo một vài qui luật khá đơn giản từ lý thuyết xác suất.

Nhiều bộ tạo số ngẫu nhiên tạo ra các số ngẫu nhiên với một CDF đồng nhất trong khoảng (0, 1). Trong một vài trường hợp, bộ tạo số ngẫu nhiên cơ bản được lựa chọn là bộ tạo các số ngẫu nhiên Gaussian với trung bình bằng 0 và phương sai đơn vị. Mặc dù chúng ta có thể tạo ra hai loại nhiễu này sử dụng imnoise, nhưng sẽ có ý nghĩa hơn trong ngữ cảnh hiện tại nếu sử dụng hàm MATLAB rand để tạo các số ngẫu nhiên đồng nhất và randn để tạo các số ngẫu nhiên chuẩn (Gaussian).

1.Bộ lọc trung bình (everage filter)
Ý tưởng
Giá trị điểm ảnh lỗi sẽ được thay thế bằng giá trị trung bình lấy từ các pixel kế cận

Ví dụ: Bằng cách xác định một mặt nạ (cửa sổ), người ta giới hạn vùng liên quan cần tính toán giá trị trung bình cần tìm của pixel lỗi (tô đậm). Điểm ảnh bất thường ở trung tâm của cửa sổ có giá trị cao hơn các pixel kế cận. Có thể sửa lỗi cho pixel này bằng cách thay giá trị trung bình của 8 pixel lân cận: 1/8 (23 + 25 + 24 + 22 + 25 + 25 + 23 + 23) = 23.75 vào mức xám của nó. Vì vậy giá trị của điểm ảnh bị lỗi sẽ là 24 (được làm tròn).

. Giải thuật
B1. Tìm điểm ảnh bị lỗi trong hình xử lý.
B2. Chọn kích thước của cửa sổ (mặt nạ) (là một ma trận vuông nxn thường có chiều dài lẻ, ví dụ 3x3, 5x5).
B3. Tính giá trị trung bình của các pixel (kể cả pixel bị lỗi).
B4. Thay giá trị điểm ảnh lỗi phát hiện được bằng trung bình vừa tính được.
B5. Dịch cửa sổ sang cột (hàng) kế tiếp.
B6. Quay lại B3.

2.Bộ lọc điểm giữa (median filter)
Ý tưởng
Giá trị điểm ảnh lỗi sẽ được thay thế bằng giá trị giữa trong một bộ giá trị được sắp xếp theo thứ tự lấy từ các pixel kế cận.

Giải thuật
B1. Tìm điểm ảnh bị lỗi trong hình xử lý.
B2. Chọn kích thước của cửa sổ (mặt nạ) (là một ma trận).
B3. Sắp xếp các pixel (kể cả pixel bị lỗi) theo dãy có thứ tự tăng (giảm) dần.
B4. Thay pixel bị lỗi bằng giá trị giữa của dãy vừa tính được.
B5. Dịch cửa sổ sang cột (hàng) kế tiếp.
B6. Quay lại B3.

CHƯƠNG TRÌNH:

1. Chương trình mô phỏng đối với ảnh trắng đen:

Code:
f = imread('baby.png'); % doc anh
imshow(f)
g=imnoise(f, 'salt & pepper', 0.05); % cong nhieu vao anh f
figure
imshow(g)
%---Loc nhieu bang bo loc Arithmetic mean----%
m = 3; n = 3;
w = fspecial('average', [m, n]);
f1 = imfilter(g, w);
figure
imshow(f1)
%---Loc nhieu bang bo loc Median---%
f2 = medfilt2(g, [m n]);
figure
imshow(f2)
%---Loc nhieu bang bo loc Max---%
f3 = ordfilt2(g, m*n, ones(m,n), 'symmetric');
figure
imshow(f3)
%---Loc nhieu bang bo loc Min---%
f4 = ordfilt2(g, 1, ones(m,n), 'symmetric');
figure
imshow(f4)

2. Chương trình mô phỏng đối với ảnh màu:

Code:
m = 3;
n = 3;
f = imread('hoa.jpg') % Doc anh
imshow(f)                % Hien thi anh
fR = f(:, :, 1);              % Tach cac thanh phan anh
imshow(fR)
fG = f(:, :, 2);
imshow(fG)
fB = f(:, :, 3);
imshow(fB)
gR = imnoise(fR, 'salt & pepper', 0.05); % Cong nhieu vao cac thanh phan anh
imshow(gR)
gG = imnoise(fG, 'salt & pepper', 0.05);
imshow(gG)
gB = imnoise(fB, 'salt & pepper', 0.05);
imshow(gB)
R = medfilt2(gR, [m n]); %Loc nhieu cho tung thanh phan cua anh
G = medfilt2(gG, [m n]);
B = medfilt2(gB, [m n]);
ffilt = cat(3, R, G, B); %Xay dung lai anh ban dau
imshow(ffilt)
3. Chương trình mô phỏng khác

Code:
anhgoc = imread('cameraman.tif'); 
%anhgoc = imread('eight.tif'); 
imview(anhgoc);
noise = imnoise(anhgoc,'gaussian');
anhnhieu=anhgoc+noise;
imview(anhnhieu);
h=fspecial('disk');
%anhloc=imfilter(anhgoc,h);
anhdisk=imfilter(anhgoc,h,'replicate');
imview(anhdisk);
subplot(2,2,1);imshow(anhgoc);title('Original Image');
subplot(2,2,2);imshow(anhnhieu);title('Noise Image');
subplot(2,2,3);imshow(anhdisk);title('Disked Image');
h=fspecial('unsharp');
anhunsharp=imfilter(anhgoc,h,'replicate');
imview(anhunsharp);
subplot(2,2,4);imshow(anhunsharp);title('Unsharped Image');

Kết luận

Bộ lọc trung bình làm mờ các cạnh và chi tiết của ảnh

Bộ lọc điểm giữa khắc phục được bất lợi trên

Kích thước của cửa sổ lọc không nhất thiết phải là một ma trận vuông

Nhược điểm: giá trị các pixel lân cận điểm nhiễu (pixel gốc) cũng bị thay đổi theo


Falleaf: Sửa phần trình bày
File Kèm Theo
File Type: ppt impulseNoiseFilter.ppt (759.5 KB, 1163 lần tải)

thay đổi nội dung bởi: falleaf, 17-04-2007 lúc 01:49 PM.
thanh_nam1977 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 09:26 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam