ĐÁNH GIÁ CHẤT LƯỢNG ẢNH THÔNG QUA tỉ số PSNR (có code bên dưới) ĐÁNH GIÁ CHẤT LƯỢNG ẢNH THÔNG QUA tỉ số PSNR (có code bên dưới) ĐÁNH GIÁ CHẤT LƯỢNG ẢNH THÔNG QUA tỉ số PSNR (có code bên dưới) ĐÁNH GIÁ CHẤT LƯỢNG ẢNH THÔNG QUA tỉ số PSNR (có code bên dưới) ĐÁNH GIÁ CHẤT LƯỢNG ẢNH THÔNG QUA tỉ số PSNR (có code bên dưới)
Trang 1ĐÁNH GIÁ CHẤT LƯỢNG ẢNH THÔNG QUA TỈ SỐ PSNR
Trang 3DANH MỤC CÁC TỪ VIẾT TẮT
MSE Mean Squared Error
RGB Red Green Blue
PSNR Peak Signal Noise Ratio
Trang 4CHƯƠNG 1 TỔNG QUAN VỀ ĐỀ TÀI
1.1 Giới thiệu về hệ thống xử lý ảnh
Xử lý ảnh là một lĩnh vực mang tính khoa học và công nghệ Nó là ngành khoa họcmới so với nhiều ngành khoa học khác nhưng tốc độ phát triển của nó rất nhanh,kích thích các trung tâm nghiên cứu, ứng dụng, đặc biệt là máy tính chuyên dụngdành riêng cho nó
Xử lý ảnh được đưa vào giảng dạy ở bậc đại học của nước ta khoảng 10 năm nay
Nó là môn học liên quan đến nhiều lĩnh vực và cần nhiều kiến thức cơ sở khác Đầutiên phải kể đến Xử lý tín hiệu số là môn học cơ bản cho xử lý tín hiệu chung, cáckhái niệm về tích chập, các biến đổi Fourier, biến đổi Laplace, các bộ lọc hữu hạn…thứ hai , các công cụ toán như Đại số tuyến tính, xác suất, thống kê
Các phương pháp xử lý ảnh bắt đầu từ các ứng dụng chính: nâng cao chất lượngảnh, phân tích ảnh Ứng dụng đầu tiên được biết đến là nâng cao chất lượng ảnh báođược truyền qua cáp từ LonDon đến New York từ những năm 1920 Vấn đề về nângcao chất lượng ảnh có liên quan tới mức phân bố sáng và độ giải của ảnh Việc nângcao chất lượng ảnh được phát triển vào những năm 1955 Điều này có thể giải thíchđược vì sau Thế chiến thứ 2, máy tính phát triển nhanh tạo điều kiện cho quá trình
xử lý ảnh số thuận lợi Năm 1964, máy tính đã có khả năng xử lý và nâng cao chấtlượng ảnh từ mặt trăng và vệ tinh Ranger 7 của Mỹ bao gồm: làm nổi đường biên vàlưu ảnh Từ năm 1964 đến nay, các phương tiện xử lý, nâng cao chất lượng và nhậndạng phát triển ảnh không ngừng Các phương pháp tri thức nhân tạo như mạngnoron nhân tạo, các thuật toán xử lý hiện đại và cải tiến, các công cụ nén ảnh ngàycàng được áp dụng rộng rãi và thu nhiều kết quả khả quan
1.2 Một số khái niệm về ảnh số
Ảnh số là tập hợp các điểm ảnh với mức xám thích hợp dùng để mô tả ảnh gầnvới ảnh thật
Trang 5 Điểm ảnh (Pixel): là một phần tử của ảnh số tại toạ độ (x, y) với độ xám hay màunhất định.
Mức xám: Là kết quả của sự biến đổi tương ứng 1 giá trị độ sáng của 1 điểm ảnhvới một giá trị nguyên dương
Độ phân giải (Resolution) ảnh là mật độ điểm ảnh được ấn định trên một ảnh sốđược hiển thị
Ảnh nhị phân: Giá trị xám của tất cả các điểm ảnh chỉ nhận giá trị 1 hoặc 0 vậymỗi điểm ảnh trong ảnh nhị phân được biểu diễn bởi một bit Ảnh xám: Giá trị xámnằm trong [0, 255] vậy mỗi điểm ảnh trong ảnh nhị phân được biểu diễn bởi mộtbyte
Hình 1-1: Ảnh nhị phân
Hệ màu RGB: Một pixel được biểu diễn bằng 3 giá trị (R, G, B) trong đó R, G, B
là một giá trị xám và được biểu biểu diễn bằng một byte Khi đó ta có một ảnh 24
Trang 6Hình 1-2: Hệ màu RGB
1.3 Ứng dụng của Matlab trong xử lý ảnh
Matlab là một công cụ tính toán trong kỹ thuật, đặc biệt là các bài toán về matrận Matlab còn cung cấp các toolboxes chuyên dụng để giải quyết những vấn đề
cụ thể như xử lý ảnh, xử lý số tín hiệu, neuron, mô phỏng… Matlab cung cấp ImageProcessing toobox, chuyên về xử lý ảnh Có thể nói Matlab là một công cụ lợi hạigiúp cho việc thực hiện các giải thuật xử lý ảnh nhanh chóng và dễ hiểu
Một số hàm Matlab cơ bản sử dụng trong môn xử lý ảnh:
Imread(): Đọc ảnh
Imnoise(): Thêm nhiễu vào ảnh
Imshow(): Hiển thị ảnh
Trang 7CHƯƠNG 2 NỘI DUNG CỦA ĐỀ TÀI
1.4 Các loại nhiễu ảnh cơ bản
Nhiễu salt and pepper: Nhiễu này sinh ra do xảy ra sai số trong quá trình truyền
dữ liệu Những pixel đơn được đặt luân phiên mang giá trị 0 hay giá trị maximumtạo ra hình chấm dạng muối tiêu trên ảnh
Hình 2-3: Ảnh nhiễu Salt and Pepper
Nhiễu Gaussian: Là một dạng lý tưởng của nhiễu trắng, được gây ra bởi nhữngdao động ngẫu nhiên của tín hiệu Nhiễu Gaussian chính là nhiễu trắng có phân bốchuẩn Nhiễu Trắng là một tín hiệu ngẫu nhiên có mật độ phân bố công suất thẳngnghĩa là tín hiệu nhiễu có công suất bằng nhau trong toàn khoảng băng thông NhiễuTrắng ảnh hương lên toàn toàn bộ phổ tần của tín hiệu Tín hiệu này có tên là nhiễuTrắng vì nó có tính chất tương tự với ánh sáng trắng
Trang 8Hình 2-4: Ảnh nhiễu Gaussian
NhiễuSpeckle: Có thể được mô hình bằng cách nhân các giá trị ngẫu nhiên vớigiá trị của các pixel Nhiễu Speckle là vấn đề quan tâm chủ yếu trong các ứng dụngradar
Hình 2-5: Ảnh nhiễu Speckle
Nhiễu Poisson cũng là một dạng của nhiễu Trắng
Trang 9 Trong lọc trung bình người ta thường ưu tiên cho các hướng để bảo vệ biên củaảnh khỏi bị mờ khi làm trơn ảnh Các kiểu mặt nạ được sử dụng tùy theo các trườnghợp khác nhau.
Trang 10Hình 2-7: Ví dụ về bộ lọc trung bình
Bộ lọc trung bình hiệu quả nhất trong việc khử nhiễu Gaussian nhưng đổi lại là sựmất các chi tiết hình ảnh cao tần Kích thước kernel lớn hơn sẽ có hiệu quả lọc lơnhơn nhưng làm giảm chất lượng hình ảnh nên lọc này không hiệu quả trong việckhử nhiễu ‘salt and pepper’ Một biến thể phổ biến khác của bộ lọc này là tạo mộtngưỡng và chỉ thay thế các giá trị điểm ảnh hiện tại so với giá trị trung bình củavùng lân cận nếu độ lớn của giá trị trung bình nằm nằm dưới ngưỡng này
1.1.2 Bộ lọc Median (bộ lọc trung vị)
Bộ lọc trung vị thường được sử dụng trong xử lý ảnh Lọc Median vượt quanhững hạn chế của bộ lọc trung bình Bộ lọc này thay thế điểm ảnh đích bằng giá trịtrung vị của các điểm ảnh lân cận và chính điểm ảnh đó Bộ lọc Median sẽ tìm giátrị trung vị trong tất cả các điểm ảnh sau đó thay vào điểm ảnh trung tâm Các bộlọc trung vị là cấp trên bộ lọc trung bình ở chỗ nó giữ độ nét tần số cao trong khivẫn loại bỏ nhiễu
Kỹ thuật này đòi hỏi giá trị các điểm ảnh trong cửa sổ phải xếp theo thứ tự tănghay giảm dần so với giá trị trung vị Kích thước cửa sổ được chọn sao cho số điểmảnh trong cửa sổ là lẻ Cửa sổ hay dùng là cửa sổ có kích thước 3*3, 5*5 hay 7*7
Trang 11 Có lợi cho việc loại bỏ các điểm ảnh hay các hàng mà vẫn bảo toàn độ phân giải.
Hiệu quả giảm khi số điểm trong cửa sổ lớn hay bằng một nửa số điểm trong cửa
sổ Điều này dễ giải thích vì trung vị giá trị lớn nhất Lọc trung vị cho trường hợp 2chiều coi như lọc trung vị tách được theo từng chiều
Hình 2-8: Ví dụ về bộ lọc trung vị
1.1.3 Bộ lọc Gaussian
Bộ lọc Gaussian rất quan trọng với cả lý thuyết và thực tiễn Chúng ta lọc hình ảnhbằng cách sử dụng một kernel là dạng đối xứng xuyên tâm của hàm Gauss 2-D liêntục được xác định như sau:
Trang 12 Xấp xỉ rời rạc để hàm liên tục này sử dụng 2 tham số tự do là:
(1) Các kích thước mong muốn của các Kernel (như là một mặt nạ lọc N*N).(2) Giá trị độ lệch chuẩn của hàm Gaussian
Ứng dụng của bộ lọc Gaussian chính là làm mịn ảnh, nó khác với bộ lọc trungbình ở chổ là: thứ nhất, mức độ làm mịn được điều khiển bởi sự lựa chọn các tiêuchuẩn thông số độ lệch, chứ không phải bởi giá trị tuyệt đối của kích thước hạtnhân,thứ 2, hàm Gaussian có một thuộc tính khá đặc biệt, đó là biến đổi Fourier của
nó là một hàm Gaussian, điều đó rất thuận tiện để việc phân tích miền tần số của bộlọc
Một hàm Gauss với giá trị lớn của s là một ví dụ về bộ lọc thông thấp, trong đóhàm lượng tần số không gian cao(ví dụ: tính năng cạnh sắc nét) của hình ảnh đượcloại bỏ Để hiểu được điều này đòi hỏi chúng ta có nền tảng tốt trong các biến đổiFourier, phân tích trong miền tần số
1.1.5 Bộ lọc thông cao ( High Pass Filter)
Bộ lọc thông cao dùng nhiều trong trích chọn biên và làm trơn ảnh
Dễ dàng nhận thấy, biên là điểm có độ biến thiên nhanh về giá trị mức xám theoquan điểm về tần số tín hiệu Vậy các điểm biên ứng với các thành phần tần số cao
Từ đó,ta có thể dùng bộ lọc thông cao để cải thiện nhiễu : nghĩa là có thể lọc cácthành phần tần số thấp và giữ lại các thành phần tần số cao Vì vậy, lọc thông caothường được dùng làm trơn biên trước khi tiến hành các thao tác với biên ảnh Dướiđây là một số mặt nạ dùng trong lọc thông cao:
Trang 13Hình 2-9: Một số nhân chập trong lọc thông cao
Hình 2-10: Lọc thông cao
1.6 Tỷ số PSNR
Cụm từ tỉ số tín hiệu cực đại trên nhiễu (peak signal-to-noise ratio) được viết tắt
là PSNR, là một thuật ngữ dùng để tính tỉ lệ giữa giá trị năng lượng tối đa của một tín hiệu và năng lượng nhiễu ảnh hướng đến độ chính xác của thông tin Vì có rất nhiều tín hiệu có phạm vi biến đổi rộng, nên PSNR thường được biểu diễn bởi
Trang 14PSNR thấp hơn (thông thường PSNR càng cao thì chất lượng dữ liệu được khôi phục càng tốt) Vì vậy khi so sánh kết quả của 2 thuật toán cần phải dựa trên codecs giống nhau và nội dung của dữ liệu cũng phải giống nhau
Cách đơn giản nhất : định nghĩa thông qua sai số toàn phương trung bình (MSE,
mean squared error) được dùng cho ảnh 2 chiều có kích thước m×n trong
đó I và K là ảnh gốc và ảnh được khôi phục tương ứng:
Giá trị thông thường của PSNR trong lossy ảnh và nén video từ 30 đến 50 dB, giá trị càng cao thì càng tốt Giá trị có thể chấp nhận được khi truyền tín hiệu không dây có tổn thất khoảng từ 20 dB đến 25 dB
1.7 Sơ đồ giải thuật
Ảnh vào
Tính tỷ số PSNRgiữa ảnh nhiễu vàảnh gốcThêm Nhiễu cho ảnh
Tính tỷ số PSNRgiữa ảnh đã lọc vàảnh gốcLọc ảnh
Trang 15CHƯƠNG 3 KẾT QUẢ MÔ PHỎNG
1.8 Các bước thực hiện mô phỏng
Bước 1: Mở giao diện
Hình 3-13: Giao diện của Guide
Bước 2: Chọn ảnh
Trang 16Bước 3: Lựa chọn loại nhiễu sau đó click “chen nhieu”.
Hình 3-15: Thêm nhiễu cho ảnh
Bước 4: Lựa chọn bộ lọc sau đó click “loc nhieu”
Hình 3-16: Lọc nhiễu
1.9 Nhận xét:
Sau khi thống kê các kết quả thì ta có:
Trang 17Nhiễu Salt and Pepper được bộ lọc Mean lọc tốt nhất.Nhiễu Gaussian được bộ lọc Wiener lọc tốt nhất.Nhiễu Poisson được bộ lọc Wiener lọc tốt nhất.Nhiễu Speckle được bộ lọc Gaussian lọc tốt nhất.
Trang 18CHƯƠNG 4 KẾT LUẬN
1.10 Ưu và nhược điểm
Ưu điểm:
Dễ dàng sử dụng
Kết quả đúng như mong đợi
Sai số nằm trong mức cho phép
Trang 19TÀI LIỆU THAM KHẢO
Tiếng Việt:
[1] Wikipedia.com
Tiếng Anh:
[2] Mathwork.com
Trang 20PHỤ LỤC A
function varargout = adnoise(varargin)
% ADNOISE M-file for adnoise.fig
% ADNOISE, by itself, creates a new ADNOISE or raises the existing
% singleton*
%
% H = ADNOISE returns the handle to a new ADNOISE or the handle to
% the existing singleton*
%
% ADNOISE('CALLBACK',hObject,eventData,handles, ) calls the local
% function named CALLBACK in ADNOISE.M with the given input
arguments
%
% ADNOISE('Property','Value', ) creates a new ADNOISE or raises the
% existing singleton* Starting from the left, property value pairs are
% applied to the GUI before adnoise_OpeningFcn gets called An
% unrecognized property name or invalid value makes property application
% stop All inputs are passed to adnoise_OpeningFcn via varargin
%
% *See GUI Options on GUIDE's Tools menu Choose "GUI allows only one
% instance to run (singleton)"
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help adnoise
% Last Modified by GUIDE v2.5 10-Nov-2017 17:11:49
% Begin initialization code - DO NOT EDIT
Trang 21[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% - Executes just before adnoise is made visible
function adnoise_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to adnoise (see VARARGIN)
% Choose default command line output for adnoise
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% set(handles.text19, 'visible', 'off');
% set(handles.popupmenu5, 'visible', 'off');
% set(handles.text21, 'visible', 'off');
% set(handles.popupmenu4, 'visible', 'off');
% set(handles.edit5, 'visible', 'off');
% set(handles.text29, 'visible', 'off');
% UIWAIT makes adnoise wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% - Outputs from this function are returned to the command line
function varargout = adnoise_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
Trang 22% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% - Executes on button press in pushbutton2
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
close
% - Executes on selection change in popupmenu1
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array
% contents{get(hObject,'Value')} returns selected item from popupmenu1luachonnhieu = 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');
Trang 23set(handles.text4, 'visible', 'off');
otherwise
set(handles.edit1, 'visible', 'on');
set(handles.text4, 'visible', 'on');
end
% - Executes during object creation, after setting all properties
function popupmenu1_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenu1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows
% See ISPC and COMPUTER
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit1 as text
% str2double(get(hObject,'String')) returns contents of edit1 as a double
% - Executes during object creation, after setting all properties
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
Trang 24% - Executes on button press in chennhieu.
function chennhieu_Callback(hObject, eventdata, handles)
% hObject handle to chennhieu (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% (Monte-Carlo Rejection Method) Ref Numerical
% Recipes in C, 2nd Edition, Press, Teukolsky,
% Vetterling, Flannery (Cambridge Press)