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!

Thủ Thuật Windows 7, Windows 8.1, Windows 10

Tác Giả: VuTienIT

Website: Thủ Thuật Windows

Mô Tả:Tôi ưa thích khám phá tìm hiểu các vấn đề về liên quan tới điện thoại, máy tính. Và tôi cũng ưa thích lập trình Website. Bạn có thể tìm thấy tôi thông qua Facebook cũng như xem các Video tôi hướng dẫn về Thủ Thuật Computer. Bạn có thắc mắc gì về bài viết xin để lại bình luận phía dưới Tôi xin được giải đáp cho bạn!

Lưu ý khi bạn bình luận tại VuTienIT.Com

Bạn hãy sử dụng địa chỉ Email thật và tên thật để VuTienIT có thể xưng hô và trả lời bình luận qua Email.
Bạn hãy bình luận bằng Tiếng Việt và có dấu.
Nếu bạn muốn tìm kiếm phần mền nào đó các bạn có thể nhập tên phần mền vào ô tìm kiếm bên trên đầu.
Nếu Link tải File bị hỏng bạn hãy bình luận bên dưới VuTienIT sẽ cập nhật lại Link tải cho bạn.
Nếu bạn thấy thích bài viết này thì bạn hãy Share bài viết để VuTienIT có nhiều bài viết hay hơn dành cho bạn!
VuTienIT chúc bạn gặp nhiều may mắn thành công trong cuộc sống.
 

Hãy trở thành người đầu tiên bình luận!

Thông báo
avatar
250

wpDiscuz