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!

Quản Trị Viên
  • Nếu trong bài viết có Link Tải mà bạn tiến hành tải về bị hỏng (Lỗi) bạn có thể Bình luận phía dưới thông báo để Mình sẽ Fix lại Link tải cho bạn trong thời gian sớm nhất.
  • Nếu bạn thắc mắc vấn đề gì trong bài viết mà chưa hiểu hay chưa rõ ràng ở phần nào đó. Bạn hãy bình luận phía dưới Mình và Bạn cùng đưa ra lời giải đáp thỏa đáng nhé!
  • Cám ơn bạn đã GHÉ THĂM VuTienIT.Com. Mình chúc bạn sẽ giải quyết được vấn đề bạn đang gặp phải.

Xem thêm bài viết Subscribe

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

Thông báo
avatar
250
wpDiscuz