Bộ lọc ngược:

Một phần của tài liệu Báo cáo thực tập: XỬ LÝ ẢNH TRONG MATLAB (Trang 49)

Ta có : Y(i,j) = X(i,j)*F(i,j)

Từ đó ta có thể khôi phục DFT của ảnh ban đầu : X(i,j) = Y(i,j)/F(i,j)

Tuy nhiên một số thành phần của bộ lọc rất nhỏ, nên phép chia sẽ tạo ra giá trị rất lớn-lấn át, quyết định giá trị ngõ ra. Nên ta sẽ khó thu được kết quả ảnh gốc chấp nhận được.

Có thể giải quyết vấn đề trên như sau:

Áp một bộ lọc thông thấp vào phép chia :

Sẽ loại bỏ những giá trị rất nhỏ của bộ lọc F(i,j)

Chọn một ngưỡng giá trị d, nếu |F(i,j)| < d chúng ta sẽ không thực hiện phép chia mà giữ giá trị ban đầu.

Một ứng dụng khác của bộ lọc ngược : lảm rõ ảnh bị mờ do chuyển động. Ví dụ : >> bc=imread(‟board.tif‟); >> bg=im2uint8(rgb2gray(bc)); >> b=bg(100:355,50:305); >> imshow(b) >> m=fspecial(‟motion‟,7,0); >> bm=imfilter(b,m); >> imshow(bm) Cho ta kết quả sau :

Để làm rõ ảnh ta cần thực hiện phép chia giữa DFT của ảnh bị làm mờ cho DFT của bộ lọc làm mờ ảnh. Có nghĩa là trước tiên ta cần tạo ma trận tương đương với sự biến đổi làm mờ ảnh.

>> m2=zeros(256,256); >> m2(1,1:7)=m; >> mf=fft2(m2);

>> bmi=ifft2(fft2(bm)./mf);

>> fftshow(bmi,‟abs‟) Kết quả như sau:

Kết quả không được tốt do đặc tính của bộ lọc ngược.

Theo phương pháp thứ 2 để khắc phục đặc tính của bộ lọc ngược ta định nghĩa một giá trị ngưỡng d=0.02

>> mf=fft2(m2);mf(find(abs(mf)<d))=1;

>> bmi=ifft2(fft2(bm)./mf); >> imshow(mat2gray(abs(bmi))*2) Ta có kết quả :

>> tnn(:,:,1) = medfilt2(tnn(:,:,1)); >> tm2 = ntsc2rgb(tnn);

>> imshow(tm2)

4. Phát hiện đường biên:

Một đường biên ảnh sẽ của một hình ảnh nhị phân có chứa các cạnh của đầu vào theo hai cách:

1. Chúng ta chỉ làm trên thành phần cường độ, và áp dụng hàm edge cho nó.

2. Chúng ta áp dụng hàm edge cho mỗi thành phần của ảnh RGB, và thực hiện để được kết quả.

Thực hiện phương pháp đầu tiên với hàm rgb2gray: >> f = imread('football.jpg');

>> fg = rgb2gray(f);

>> fe1 = edge(fg);% mac dinh la Sobel. >> imshow(fe1)

Cho phương pháp thứ 2, chúng ta thực hiện với phép toán “or”: >> f1 = edge(f(:,:,1)); >> f2 = edge(f(:,:,2)); >> f3 = edge(f(:,:,3)); >> fe2 = f1|f2|f3; >> imshow(fe2)

KẾT LUẬN

Sau 2 tháng kể từ khi nhận đề tài, với sự cố gắng nỗ lực của bản thân, cùng với sự chỉ bảo của cô giáo hướng dẫn em đã hoàn thành đề tài này. Thông qua đề tài: ”XỬ LÝ

ẢNH TRONG MATLAB” đã thực sự giúp em nắm vững hơn thực tế chuyên môn,

nhằm củng cố thêm cho kiến thức đã được học ở nhà trường. Qua đây em cũng được dịp mở rộng tầm hiểu biết của mình về mảng kiến thức trong ngành điện tử viễn thông. Đối với em, bản báo cáo thực sự phù hợp với những kiến thức em đã tích lũy được khi học ngành kỹ thuật điện tử, điện tử viễn thông. Trong quá trình làm báo cáo do trình độ hiểu biết của em có hạn nên nội dung báo cáo không tránh khỏi những sai sót. Em mong các thầy cô trong bộ môn châm trước và hy vọng nhận được sự chỉ bảo tận tình của các thầy cô. Đó sẽ là những kinh nghiệm , tri thức hết sức quý báu giúp em trong công việc sau này.

Một lần nữa em xin chân thành cảm ơn cô Phạm Thị Thanh Huyền đã hướng dẫn và giúp đỡ em hoàn thành bản báo cáo này. Đồng thời em cũng xin cảm ơn tất cả các thầy cô đã dạy dỗ em trong suốt bốn năm học qua. Nhờ các thầy cô mà em mới có được kiến thức như ngày hôm nay.

TÀI LIỆU THAM KHẢO

1. Fundamentals of Digital Image Processing: A Practical Approach with Examples in Matlab

2. Matlab Tutorial : Digital Image Processing I

3. Giáo trình xử lý ảnh (Người soạn: TS. Đỗ Đăng Toàn và TS. Phạm Việt Bình ĐH Thái Nguyên)

4. Matlab và ứng dụng trong viễn thông ( Tác giả : TS.Đặng Hồng Liên –Phạm Đăng Khoa- Trần Thanh Phương )

Một phần của tài liệu Báo cáo thực tập: XỬ LÝ ẢNH TRONG MATLAB (Trang 49)

Tải bản đầy đủ (DOC)

(62 trang)
w