Lọc trung bình tỉa alpha trong xử lý ảnh năm 2024
MỤC LỤC..............................................................................................................MỤC LỤCLỜI MỞ ĐẦU........................................................................................................
CHƯƠNG 1: TỔNG QUAN VỀ PHÉP NHÂN CHẬP.........................................1 Phép nhân chập là gì?................................................................................Tích chập là kỹ thuật quan trọng trong Xử Lý Ảnh, được sử dụng chínhyếu trong các phép toán trên ảnh như: đạo hàm ảnh, làm trơn ảnh, trích xuất biêncạnh trong ảnh. Trình bày về kỹ thuật tích chập trong lĩnh vực xử lý ảnh và cáchhiện thực nó sử dụng ngôn ngữ C++ có hỗ trợ của thư viện openCV.1 Định nghĩa về pháp nhân chập..................................................................Theo toán học, tích chập là phép toán tuyến tính, cho ra kết quả là một hàmbằng việc tính toán dựa trên hai hàm đã có (f và g). Đối với phép lọc ảnh, phéptích chập giữa ma trận lọc (kernel) và ảnh cho ra kết quả ảnh đã được xóa nhiễu.Ta có công thức tích chập giữa hàm ảnh f(x, y) và bộ lọc k(x, y) (kích thước mxn)như sau:Thành phần không thể thiếu của phép tích chập là ma trận kernel. Điểmneo (anchor point) của kernel sẽ quyết định vùng ma trận tương ứng trên ảnh đểtích chập, thông thường anchor point được chọn là tâm của kernel. Giá trị mỗiphần tử trên kernel được xem như là hệ số tổ hợp với lần lượt từng giá trị độ xámcủa điểm ảnh trong vùng tương ứng với kernel.Phép tích chập được hình dung thực hiện bằng việc dịch chuyển ma trậnkernel lần lượt qua tất cả các điểm ảnh trong ảnh, bắt đầu từ góc bên trái trên củaảnh. Và đặt anchor point tương ứng tại điểm ảnh đang xét. Ở mỗi lần dịchchuyển, thực hiện tính toán kết quả mới cho điểm ảnh đang xét bằng công thứctích chập.Xem minh hoạ thực hiện: Ảnh minh hoạ theo thứ tự từ trái qua phải và từtrên xuống dưới. Ảnh cuối cùng là kết quả sau khi thực hiện di chuyển kernel hếttoàn bộ ảnh. Ký hiệu: (1) ảnh nguồn, (2) kernel, (3) ảnh kết quả. Phân phối: f * g + f * h = f * (g + h)Do tính chất kết hợp của phép tích chập, khi một phép xử lý ảnh yêu cầu thựchiện tích chập liên tiếp với nhiều bộ lọc (kernel) f * g * h. Ta có thể tính toántrước ma trận kernel để "giảm độ phức tạp tính toán" k = v * h do kích thước matrận kernel hầu như rất nhỏ so với ảnh. Lúc này, thay vì thực hiện tích chập theothứ tự r = (f * g) * h, ta thực hiện r = f * (v * h) = f * k.Ký hiệu: - f: hàm ảnh - g: bộ lọc thứ nhất - h: bộ lọc thứ hai - r: hàm ảnh kết quả1 Ưu điểm và nhược điểm trong phép nhân chập.........................................Mỗi phần tử trong ma trận kernel nên là số nguyên: như trong ví dụ trên, cácphần tử trong kernel thực ra là số thực, tuy nhiên, tôi thực hiện chuyển sang matrận số nguyên với số hạng chung cho tất cả các phần tử, kết quả tích chập sẽnhân cho số hạng chung này.Kernel nên thực hiện lưu trong mảng một chiều.Tạo ma trận chỉ số truy cập nhanh, với cách này có thể truy cập nhanh đếnpixel trên ảnh, tương ứng với kernel mà không cần tính toán chỉ số thêm lần nữa.Ví dụ, với kernel (size: 3x3, anchor point: center).(-1;-1) (-1;0) (-1;1) (0;-1) (0;0) (0;1) (1;-1) (1;0) (1;1)CHƯƠNG 2: KỸ THUẬT LỌC SỐ TRONG XỬ LÝ ẢNH................................2 Khái niệm trong kỹ thuật lọc trơn nhiễu ảnh................................................Lọc nhiễu ảnh là công đoạn tiền xử lý trong xử lý ảnh số, nhằm nâng caochất lượng hình ảnh cho mắt con người hoặc để phục vụ cho các công đoạn sau,xử lý tốt công đoạn này sẽ giúp cho các công đoạn sau tiến hành được dễ dànghơn.Có nhiều loại nhiễu khác nhau( nhiễu sạn, nhiễu cộng, nhiễu nhân,...) vàcũng có nhiều phương pháp lọc nhiễu khác nhau. Tuy nhiên, tùy từng loại nhiễumà ta nên sử dụng phương pháp lọc nhiễu nào cho phù hợp vì không phải mộtphương pháp có thể lọc được hết tất cả các loại nhiễu.Nhiễu là phần tử ảnh mà giá trị của nó trội hơn so với các phần tử xungquanh. Xét theo tần số, các phần tử nhiễu có tần số cao so với các điểm xungquanh. Tuy nhiên, khái niệm này chỉ mang tính chất tương đối.2 Các phương pháp lọc ảnh..............................................................................2.2 Lọc trung vịBộ lọc trung vị là bộ lọc làm mượt phi tuyến trong miền không gian.Bộ lọc trung vị là một trong những bộ lọc theo thống kê thứ tự.Nó thay thế giá trị của điểm ảnh bằng trung vị của các mức xám của cácđiểm ảnh lân cậnVới các ảnh nhiễu dàn đều trên toàn ảnh có khả năng làm mờ nhiễu, giảmsự khác biệt về mức sáng giữa các điểm ảnh của ảnh gốc và các điểm ảnh bịnhiễu tác động. Phương pháp này lọc tốt đối với những ảnh bị nhiễu random nhưnhiễu Gaussian hoặc nhiễu Uniform.Quá trình làm mờ nhiễu cũng đồng thời làm mờ ảnh, vì bộ lọc trung bìnhcó xu hướng cân bằng cường độ ánh sáng các điểm ảnh. Cũng như bộ lọcMedian, với các ảnh có kích thước lớn thì số phép toán phải cần thực hiện lớn.Bộ lọc trug bình có vai trò làm trơn ảnh có thể xem như bộ lọc thông cao, nhưnglại làm mờ đường biên của các đối tượng bên trong ảnh, và nhọc liễu tiêu khôngđược tốt lắm.2.2 Lọc hình họcCả phương pháp lọc trung bình và lọc hình học đều là các phương pháplọc không gian, nó có vai trò làm trơn ảnh. Giống như phương pháp lọc trungbình, phương pháp này lọc tốt hơn đối với những ảnh bị nhiễu Random nhiễuGaussian hoặc nhiễu Uniform.Ảnh sau bị lọc cũng bị mờ đi và làm mất đi ít nhiều độ chi tiết của ảnh.Với nhiễu dạng đường như hình dưới đây thì kết quả cũng không tốt nhiễu to ravà đậm lên.2.2 Lọc điều hòaBộ lọc trung bình điều hòa là một trong những bộ lọc trung bình đượcchúng tôi sử dụng để xử lý dữ liệu ảnh trong miền không gian. Chúng ta có thểsử dụng bộ lọc trung bình sóng hài để loại bỏ nhiễu muối. Tương tự như tiếng ồnmuối tiêu còn được gọi là tiếng ồn xung, không có khả năng xảy ra các xung cócường độ thấp hơn. Tuy nhiên, nó không thành công đối với tiếng ồn hạt tiêu.Bộ lọc này làm việc tốt cho các ảnh nhiễu trắng hoặc đen. Bộ lọc này làmviệc được với nhiễu Gauss và có thể duy trì thông tin chi tiết tốt hơn bộ loc trungbình số học. Bộ lọc điều hòa làm việc tốt với nhiễu muối (salt noise), nhưngkhông được tốt cho nhiễu tiêu (peper noise).Dữ liệu demo phép nhân chập lọc ảnh trơn nhiễu Phần mềm: chương trình được viết bằng phần mềm pycharm Phần code: import numpy as np import scipy as sp import itertools as it import matplotlib as plt from scipy import signal from matplotlib import FuncAnimation Show
plt.style('dark_background') # comment out for "light" theme plt["font"] = 12 plt["figure"] = ( 12 , 7 ) def RGB_convolve(im1, kern): im2 = np_like(im1) for dim in range(im1[- 1 ]): # loop over rgb channels im2[:, :, dim] = sp.signal(im_data[:, :, dim], kern, mode="same", boundary="symm") return im def RGB2RGBA(arr, fill_value= 1 ): """Add an alpha channel to an RGB array""" if arr[- 1 ] >= 4 : return arr arr2 = np(shape=(*arr[:- 1 ], 4 ), fill_value=fill_value, dtype=arr) arr2[:, :, :- 1 ] = arr/255. return arr FNAME = "blurryA" FNAME = "ducks"T = 10 # seconds FPS = 30 FTOTAL = T*FPS # total number of frames KERNELS = {"Edge Detection 3x3": np([[- 1 , - 1 , - 1 ], [- 1 , 8 , - 1 ], [- 1 , - 1 , - 1 ]]), "Sharpen 3x3": np([[ 0 , - 1 , 0 ], [- 1 , 5 , - 1 ], [ 0 , - 1 , 0 ]])} kernel_name = "Sharpen 3x3" kernel_name = "Edge Detection 3x3" kernel = KERNELS[kernel_name] im_data = RGB2RGBA(plt(FNAME).astype(np)) im_filtered = RGB_convolve(im_data, kernel) im_filtered[:, :, - 1 ] = 1 im_display = np(im_data) im_filtered[:,:,:-1] -= np(np(im_filtered[:,:,:-1], axis = 2)) Normalise to whiteim_filtered[:,:,:-1] -= np(im_filtered[:,:,:-1])im_filtered[:,:,:-1] /= 1/3 * np(np(im_filtered[:,:,:-1], axis = 2)) Normalise to individual RGBim_filtered[:,:,:-1] -= np(im_filtered[:,:,:-1])im_filtered[:,:,:-1] /= np(im_filtered[:,:,:-1]) fig, (axL, axR) = plt(ncols= 2 , constrained_layout=True) fig(kernel_name) imL = axL(im_data, interpolation="none") # remove interpolation=... imR = axR(im_data, interpolation="none") # remove interpolation=... axR_xlim(axL_xlim()), axR_ylim(axL_ylim()) axL('off'), axR('off') |