You are here
Home > Lập Trình > Tự Học Matlab > Matlab Nâng Cao > Xử Lý Ảnh Matlab > Xử Lý Ảnh Matlab – Làm Nhiễu Hạt Noise Trong Ảnh Số Trên Matlab

Xử Lý Ảnh Matlab – Làm Nhiễu Hạt Noise Trong Ảnh Số Trên Matlab

Tạo nhiễu ảnh Noise trong Matlab

Trong bài viết này tôi và cũng cùng nhau tìm hiểu cách để chèn nhiểu ảnh vào một bức ảnh số. Từ đó bạn sẽ hiểu được đặc tính nhiễu của một bức ảnh là như thế nào? Từ đó bạn sẽ biết cách khắc phục cũng như nâng cáo chất lượng hình ảnh hay là ta sẽ biết được cách khử noise.

xy ly anh matlab khu noise anh
xy ly anh matlab khu noise anh

1. Các kiểu nhiễu trên ảnh

Có 5 kiểu nhiễu mà Matlab hỗ trợ bạn đó là: salt & pepper, gaussian, localvar, poisson, speckle. Bạn muốn sử dụng 1 trong 5 kiểu trên đây đều được cả.

2. Lệnh Thêm nhiễu vào bức ảnh

Thì từng loại kiểu nhiễu thì hàm imnoise sẽ có tham số truyền vào khác nhau

ketQuaHinhAnh = imnoise('anhXam', 'salt & pepper', 0.02);

ketQuaHinhAnh = imnoise('anhXam', 'gaussian', 0.02);

ketQuaHinhAnh = imnoise('anhXam', 'localvar', ones(size(anhXam));

ketQuaHinhAnh = imnoise('anhXam', 'poisson');

ketQuaHinhAnh = imnoise('anhXam', 'speckle', 0.02);

Trong đó:

  • anhXam  : Là ảnh xám được biến đổi từ ảnh màu bằng hàm rgb2gray(hinhAnh)
  • 0.02 : Là cường độ nhiễu. Bạn muốn tăng giảm cường độ nhiều thì bạn có thể chỉnh số này tăng nên hoặc giảm đi
  • ones(size(anhXam) : Đây là đầu vào phụ hỗ trợ cho localvar vì localvar không sử dụng cường độ nhiễu. Có kích thước bằng ảnh gốc của chúng ta.
  • poisson : Sẽ không có tham số thứ 3 truyền vào. Trương trình sẽ tự hiểu loại nhiễu này và tự động thêm cường độ nhiễu vào.
  • ketQuaHinhAnh : Là một hình ảnh mới đã sử lý và bạn hoàn toàn có thể hiện thị ảnh nên GUI cũng như có thể xuất bản hình ảnh (hàm imwrite()) này.

3. Bài tập áp dụng

Dưới đây là ví dụ cho chúng ta thực hành. Giao diện thì bạn hãy tự thiết kế vì nếu tôi hướng dẫn phần này nữa thì quả thực bài viết khá là dài và không đi đúng trọng tâm vấn đề ta đang hướng tới. Nếu bạn chưa biết hay chưa có kinh nghiệm tạo giao diện thì bạn hãy xem loạt bài viết mà tôi đã hướng dẫn lập trình GUI trước đây rồi.

lam nhieu anh Noise trong matlab
lam nhieu anh Noise trong matlab

Và dưới đây là code trương trình.

1. Mo Anh (Tag: pushbutton1)

global hinhAnh;
[FileName,PathName] = uigetfile({'*.png;*.PNG','PNG Files (*.png, *.PNG)';
                                '*.tif;*.TIF','TIF Files (*.tif, *.TIF)';...
                                '*.gif;*.GIF','GIF Files (*.gif, *.GIF)';...
                                '*.jpg;*.JPG','JPG Files (*.jpg, *JPG)';...
                                '*.bmp;*.BMP','BMP Files (*.bmp, *.BMP)';...
                                '*.*','All Files(*.*)'},'Lua Chon Hinh Anh De Xu Ly');
if ~isequal(FileName,0)
    fullname = strcat(PathName,FileName);
    hinhAnh=imread(fullname);
    axes(handles.axes1);
    imshow(hinhAnh);
else
    msgbox('Ban hay chon anh de thuc hien chuong trinh!')
end

2. Kieu Nhieu (Tag: popupmenu1)

luachonnhieu = get(handles.popupmenu1,'value');
switch luachonnhieu
   case 3
      set(handles.edit1, 'visible', 'off');
      set(handles.text4, 'visible', 'off');
   case 4
      set(handles.edit1, 'visible', 'off');
      set(handles.text4, 'visible', 'off');
   otherwise
      set(handles.edit1, 'visible', 'on');
      set(handles.text4, 'visible', 'on');
end

3. Chen Nhieu (Tag: chennhieu)

global hinhAnh;
X = size(hinhAnh);
if (length(X) == 3)
   anhGoc = rgb2gray(hinhAnh);
else
   anhGoc = hinhAnh;
end;
luachonnhieu = get(handles.popupmenu1,'value');
cuongDoNhieu = get(handles.edit1,'string');
cuongDoNhieu = str2num(cuongDoNhieu);
switch luachonnhieu
   case 1
      anhNhieu = imnoise(hinhAnh,'salt & pepper',d);
      axes(handles.axes1);
      imshow(anhGoc);
      axes(handles.axes2);
      imshow(anhNhieu);
   case 2
      anhNhieu = imnoise(hinhAnh,'gaussian',d);
      axes(handles.axes1);
      imshow(anhGoc);
      axes(handles.axes2);
      imshow(anhNhieu);
   case 3
      anhNhieu = imnoise(hinhAnh,'localvar',ones(size(w)));
      axes(handles.axes1);
      imshow(anhGoc);
      axes(handles.axes2);
      imshow(anhNhieu);
   case 4
      anhNhieu = imnoise(hinhAnh,'poisson');
      axes(handles.axes1);
      imshow(anhGoc);
      axes(handles.axes2);
      imshow(anhNhieu);
   case 5
      anhNhieu = imnoise(hinhAnh,'speckle',d);
      axes(handles.axes1);
      imshow(anhGoc);
      axes(handles.axes2);
      imshow(anhNhieu);
end;

Những câu lệnh bên trên thì bạn đã được học trong các bài viết ở Lập trình GUI rồi cho nên tôi xin được phép không nói lại.

khu noise anh
khu noise anh

Tổng Kết

Trên đây chúng ta đã làm việc với một số câu lệnh giúp ta giải quyết vấn để tạo noise hay là nhiễu hạt trong 1 bức ảnh trên phần mền Maltab. Hi vọng bài viết này sẽ giúp ích cho bạn. Chúc bạn thành công!

5 1 bỏ phiếu
Đánh giá bài viết

Thủ Thuật Windows

Nếu như trong quá trình bạn tải file Active về mà bị thông báo là "tệp chứa virus" và bị xóa thì hãy làm theo các bước sau trước khi tải về nhé:

Bước 1: Tắt Windows Defender (Win 10), bạn hãy làm theo các bước này để tắt Defender tạm thời nhé, sau khi Active xong, bạn có thể bật lại:
1. Mở ứng dụng Settings.
2. Trên cửa sổ Settings, bạn tìm và click chọn Update & security.
3. Tiếp theo click chọn Windows Defender.
4. Chuyển trạng thái tùy chọn Real-time protection sang OFF.

Bước 2: Ngoài ra, Nếu trong quá trình tải về mà bạn dùng trình duyệt Chrome hay Cốc Cốc thì sau khi file tải xong không được bấm "Hủy" mà bạn nên bấm tổ hợp phím “Ctrl + J” để vào phần quản trị download, tìm đến file mà bạn tải rồi click vào ô “Khôi phục tệp…” nhé.

Có một số trường hợp file Active tải về mặc định bị xóa, nếu gặp trường hợp này bạn cần chắc chắn rằng Windows Defender hay phần mềm diệt virus trên máy đã được tắt. Sau đó bạn bấm “Ctrl +J“, tại link tải active mà bạn vừa tải về đã bị xóa, bạn hãy click vào đó để trình duyệt tải lại một lần nữa và lần này là sẽ thành công.

BQT: VuTienBlog

Subscribe
Thông báo
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả các ý kiến
Top
11
0
Bác có thắc mắc? Nhấn vào đây để bình luận!x
()
x