Xử lý ảnh là một trong những lĩnh vực phát triển rất nhanh của nghành Công nghệ thông tin. Trong những năm gần đây, phần cứng máy tính và các thiết bị liên quan đã có sự tiến bộ vượt bậc về tốc độ tính toán, dung lượng chứa, khả năng xử lý v.v… và giá cả đã giảm đến mức máy tính và các thiết bị liên quan đến xử lý ảnh đã trở lên thông dụng với dầu hết mọi người trong xã hội và việc thu nhận ảnh số bằng các thiết bị cá nhân hay chuyên dụng cùng với việc đưa vào máy tính xử lý đã trở nên đơn giản. Nó được ứng dụng rộng rãi trong nhiều lĩnh vực khoa học và công nghệ. Chẳng hạn như thị giác máy tính, robot, tìm kiếm tài liệu hình ảnh, hỗ trợ chẩn đoán hình ảnh y học, thiết kế ảnh, giải trí,… xử lý ảnh só bằng máy tính đã giúp chúng ta thay đổi các cảm nhận và sử dụng máy tính, nó đã trở thành những công cụ trực quan quan trọng không thể thiếu trong đời sống hằng ngày. Trong hoàn cảnh đó, xử lý ảnh là một lĩnh vực đang được quan tâm và đã trở thành môn học chuyên nghành của sinh viên nghành công nghệ thông tin trong nhiều trường đại học trên cả nước.
TRƯỜNG ĐẠI HỌC KHOA CÔNG NGHỆ THÔNG TIN - BÁO CÁO BÀI TẬP LỚN Đề tài: Các thuật toán xử lý ảnh Giảng viên giảng dạy Họ tên thành viên: Lớp: D101K10 Khóa: 10 Trang MỤC LỤC LỜI MỞ ĐẦU Xử lý ảnh lĩnh vực phát triển nhanh nghành Công nghệ thông tin Trong năm gần đây, phần cứng máy tính thiết bị liên quan có tiến vượt bậc tốc độ tính tốn, dung lượng chứa, khả xử lý v.v… giá giảm đến mức máy tính thiết bị liên quan đến xử lý ảnh trở lên thông dụng với dầu hết người xã hội việc thu nhận ảnh số thiết bị cá nhân hay chuyên dụng với việc đưa vào máy tính xử lý trở nên đơn giản Nó ứng dụng rộng rãi nhiều lĩnh vực khoa học công nghệ Chẳng hạn thị giác máy tính, robot, tìm kiếm tài liệu hình ảnh, hỗ trợ chẩn đốn hình ảnh y học, thiết kế ảnh, giải trí,… xử lý ảnh só máy tính giúp thay đổi cảm nhận sử dụng máy tính, trở thành công cụ trực quan quan trọng khơng thể thiếu đời sống ngày Trong hồn cảnh đó, xử lý ảnh lĩnh vực quan tâm trở thành môn học chuyên nghành sinh viên nghành công nghệ thông tin nhiều trường đại học nước I Tầm quan trọng xử lý ảnh Mục đích xử lý ảnh cải thiện chất lượng hình ảnh để phân tích theo cách tốt Chúng ta ngăn chặn, xử lý biến dạng không mong muốn ảnh nâng cao tính cần thiết cho mục đích cụ thể mà cần Những mục đích khác cần trích xuất tính khác Ví dụ nhận dạng mặt người cần quan tâm tới khn mặt có ảnh mà không cần quan tâm quần áo hay tóc họ Xử lý ảnh ứng dụng nhiều nghành trí tuệ nhân tạo, dùng ảnh để huần luyện máy tính nhận dạng vật thể có ảnh nhận dạng mặt người, nhận dạng động vật, nhận dạng viết nghành khác ví dụ xử lý ảnh thiên văn, ảnh y tế … Nhưng máy tính cần hình ảnh phù hợp để học tập với mục đích cụ thể Hãy xem xét hình ảnh sau: Chúng ta khơng thẻ thấy ngồi hình ảnh tháp vài điếm sáng Nhưng sau áp dụng xử lý ảnh có hình ảnh sau: Đừng nghĩ hình ảnh xấu mục đích xem xem có ảnh Trong hình ảnh trước khơng thể thấy biết hình dạng cối Đây tầm quan trọng xử lý ảnh II Bảng phân chia công việc STT HỌ VÀ TÊN CƠNG VIỆC -Thuật tốn cân histogram -Thuật toán lọc Trung vị -Thuật toán Co (Erosion) -Thuật toán phát biên Sobel - Thuật toán nén ảnh SVD -Thuật toán phát biên Prewitt -Thuật tốn lọc Gauussian -Thuật tốn đóng, mở -Thuật tốn ảnh âm -Thuật tốn lọc Trung bình -Thuật toán Giãn (Dilation) CHƯƠNG 1: TỔNG QUAN VỀ XỬ LÝ ẢNH Xử lý ảnh gì? Con người thu nhận thông tin qua giác quan, thị giác đóng vai trị quan trọng Những năm trở lại với phát triển phần cứng máy tính, xử lý ảnh đồ hoạ phát triển cách mạnh mẽ có nhiều ứng dụng sống Xử lý ảnh đồ hoạ đóng vai trị trịn tương tác người máy Hình ảnh chiếm 80% thông tin người thu nhận Vài chục năm gần xử lý ảnh phát triển mạnh cơng nghệ máy tính, khả lưu trữ đáp ứng hệ thống xử lý ảnh Ảnh số gì: Ảnh tạo điểm ảnh, điểm ảnh biểu diễn vơ vàn thứ, ví dụ như: ảnh chân dung, ảnh X-quang, ảnh thân nhiệt Điểm ảnh đặc trưng cho giá trị hàm n biến Ảnh thực tế ảnh liên tục khơng gian độ sáng Để xử lý ảnh máy tính cần thiết phải tiến hành số hố ảnh q trình biến đổi tín hiệu liên tục sang tín hiệu rời rạc thơng qua q trình lấy mẫu (rịi rạc hố khơng gian) lượng tử hoá thành phần giá trị mà nguyên tắc mắt thường không phân biệt điểm kề Ảnh số có loại: dạng tín hiệu tương tự (analog), dạng tín hiệu số (digital) Điểm ảnh hay gọi pixel (picture elements, pels, image element) dược xem dấu hiệu hay cường độ sáng toạ độ không gian đối tượng Ảnh tập hợp điểm ảnh Khi số hố thường biểu diễn ma trận chiều a[i][j] mà phần tử có giá trị nguyên véc tơ cấu trúc màu a giá trị độ đo (hay độ sáng) điểm ảnh vị trí có toạ độ (I, j) Mức xám (gray level): kết mã hoá tương ứng cường độ sáng điểm ảnh với giá trị số - kết q trình lượng hố Ảnh Ảnh đen trắng Ảnh đa cấp xám Ảnh RGB Ảnh 32 bit Số bit/pixel 24 32 Số màu 256 2563 2564 Megapixel đơn vị đo độ phân giải thiết bị quang (như số điểm ảnh) đặc biệt camera số Giá trị megapixel tính cách nhân chiều rộng với chiều cao điểm ảnh Ví dụ ảnh có độ phân giải 1280*1024 = 1.310.720 pixel 1.3 megapixel Nhưng khơng phải camera có độ phân giải cao chất lượng tốt hơn, chất lượng hình ảnh cịn phụ thuộc vào số yếu tố khác thấu kínhm cảm biến chụp ảnh trình xử lý hình ảnh (bức ảnh sau chụp cố định mức màu, cân trắng …) Hình ảnh đồ hoạ máy tính chia làm loại: vector raster Mơ hình Raster Đây cách biểu diễn ảnh thơng dụng nay, ảnh biểu diễn dạng ma trận điểm ảnh Thường thu nhận qua thiết bị camera, sacnner Tuỳ theo yêu cầu thực tế mà điểm ảnh biểu diễn qua hay nhiều bit Mơ hình Raster thuận lợi cho hiển thị in ấn Ngày công nghệ phần cứng cung cấp thiết bị thu nhận ảnh Raster phù hợp với tốc độ nhanh chất lượng cao cho đầu vào đầu Một thuận lợi cho việc hiển thị môi trường Windows Microsoft đưa khuôn dạng ảnh DIB (Device Independent Bitmap) làm trung gian Một hướng nghiên cứu mơ hình biểu diễn kĩ thuật nén ảnh, kỹ thuật nén ảnh lại chia theo hướng nén bảo tồn nén khơng bảo tồn, thơng tin nén bảo tồn có khả phục hồi tồn liệu bân đầu cịn nén khơng bảo tồn có khả phục hồi sai số cho phép Theo cách tiếp cận người ta đề nhiều quy cách khác BMP, TIF, GIF, PCX… Hiện giới có 50 khn dạng ảnh thơng dụng bao gồm kỹ thuật nén có khả phục hồi liệu 100% nén có khả phục hồi với sai số chấp nhận Mơ hình Vector Biểu diễn ảnh ngồi mục đích tiết kiệm khơng gian lưu trữ dễ dàng cho hiển thị, in ấn dễ dàng việc lựa chọn chép di chuyển tìm kiếm… Theo yêu cầu kỹ thuật biểu diễn Vector tỏ ưu việt Trong mơ hình Vector người ta sử dụng hướng vector điểm ảnh lân cận để mã hoá tái tạo hình ảnh ban đầu, ảnh vector thu nhận trực tiếp từ thiết bị số hoá Digital chuyển đổi từ ảnh Raster thông qua phần mềm số hố Cơng nghệ phần cứng cung cấp thiết bị với tốc độ sử lý nhanh chất lượng cho đầu đàu vào nhugnw lại hỗ trợ cho ảnh Raster Do vậy, nghiên cứu biểu diễn vector tập trung từ chuyển đổi ảnh sang Raster Hình ảnh vector Được mơ tả đường cong hình học Hình ảnh raster Được mô tả lưới điểm, điểm gọi pixel có giá trị màu riêng Khơng thay đổi chất lượng phóng to Chất lượng bị giảm phóng to thu thu nhỏ nhỏ ảnh File lưu trữ có dung lượng nhỏ File có dung lương lớn lớn Thường dùng cho chữ, logo, hình Thường dùng cho hình ảnh có tơng màu minh hoạ liên tục ảnh chụp tranh vẽ Thường có dạng: Thường có dạng: cdr psd tif fh jpg Thơng tin ảnh • • • • Chiều rộng: số pixel / dòng (số byte/ số dòng) Chiều cao: số dòng Độ phân giải: số pixle/ inch Số bit / pixel Số bit dùng màu trực tiếp Pal: pallete Pal[index].R, Pal[index].G, Pal[index].B Nếu số bit/pixel > ta có ảnh cấp xám, = ta có ảnh nhị phân với cấp xám 16bit/pixel R G B 24 bit/pixel, phần màu byte R G B Độ phân giải ảnh (ppi) số điểm ảnh có đơn chiều dài ảnh (inch) 10 plt.title('Ảnh gaussian') plt.imshow(test_img, cmap = 'gray') plt.show() Chạy thử trương trình: 2.6 Thuật tốn phát biên sobel Ý tưởng: Sử dụng kernel có kích thước 3x3 nhân chập với ảnh gốc đề tính đạo hàm theo hướng ngang (Gx) dọc (Gy) sau tính trung bình độ lớn gradient Tính đạo hàm thay đổi pixel theo hướng Cuối dựa vào cường độ tính làm bật đường biên Mơ tả thuật tốn: Kỹ thuật sử dụng mặt nạ nhập chập xấp xỉ đạo hàm theo hướng x y là: Hx = -1 -2 -1 Hy = Các bước tính toán kỹ thuật Sobel 23 -1 -2 -1 0 + Bước 1: Tính I ⊗ Hx I ⊗ Hy + Bước 2: Tính I ⊗ Hx + I ⊗ Hy -Input: Ảnh -Output: Ảnh đường biên Chương trình cài đặt: import numpy as np import cv2 as cv from matplotlib import pyplot as plt def sobelOperator(img): container = np.copy(img) size = container.shape for i in range(1, size[0] - 1): for j in range(1, size[1] - 1): gx = (img[i - 1][j - 1] + 2*img[i][j - 1] + img[i + 1][j - 1]) - (img[i - 1][j + 1] + 2*img[i][j + 1] + img[i + 1][j + 1]) gy = (img[i - 1][j - 1] + 2*img[i - 1][j] + img[i - 1][j + 1]) - (img[i + 1][j - 1] + 2*img[i + 1][j] + img[i + 1][j + 1]) container[i][j] = np.sqrt(gx**2 + gy**2) return container # Đường dẫn file ảnh path = 'images/cat.jpg' # Đọc ảnh image = cv.imread(path, 0) new_img = sobelOperator(image) plt.figure(figsize=(7,7)) plt.subplot(1,2,1) plt.title('Ảnh gốc') plt.imshow(image, cmap = 'gray') plt.subplot(1,2,2) plt.title('Ảnh sobel') plt.imshow(new_img, cmap = 'gray') plt.show() 24 Chạy thử chương trình: 2.7 Thuật tốn phát biên Prewitt Ý tưởng: Sử dụng kernel có kích thước 3x3 đặc trưng phương pháp prewitt nhân chập với ảnh gốc đề tính đạo hàm theo hướng ngang (Gx) dọc (Gy) sau tính trung bình độ lớn gradient Tính đạo hàm thay đổi pixel theo hướng Cuối dựa vào cường độ tính làm bật đường biên Mơ tả thuật tốn: Kỹ thuật sử dụng mặt nạ nhập chập xấp xỉ đạo hàm theo hướng x y là: Hx = -1 -1 -1 Hy = Các bước tính tốn kỹ thuật Prewitt + Bước 1: Tính I ⊗ Hx I ⊗ Hy + Bước 2: Tính I ⊗ Hx + I ⊗ Hy -Input: Ảnh 25 -1 -1 -1 0 1 -Output: Ảnh đường biên làm bật Chương trình cài đặt: import numpy as np import cv2 as cv from matplotlib import pyplot as plt def prewittOperator(img): container = np.copy(img) size = container.shape for i in range(1, size[0] - 1): for j in range(1, size[1] - 1): gx = (img[i - 1][j - 1] + 1*img[i][j - 1] + img[i + 1][j - 1]) - (img[i - 1][j + 1] + 1*img[i][j + 1] + img[i + 1][j + 1]) gy = (img[i - 1][j - 1] + 1*img[i - 1][j] + img[i - 1][j + 1]) - (img[i + 1][j - 1] + 1*img[i + 1][j] + img[i + 1][j + 1]) container[i][j] = np.sqrt(gx**2 + gy**2) return container # Đường dẫn file ảnh path = 'images/shape.jpg' # Đọc ảnh image = cv.imread(path, 0) new_img = prewittOperator(image) plt.figure(figsize=(7,7)) plt.subplot(1,2,1) plt.title('Ảnh gốc') plt.imshow(image, cmap = 'gray') plt.subplot(1,2,2) plt.title('Ảnh prewitt') plt.imshow(new_img, cmap = 'gray') plt.show() 26 Chạy thử chương trình: 2.8 Thuật tốn giãn ảnh Ý tưởng: So sánh với pixel lân cận vị trí có giá trị sau thiết lập giá trị cho pixel tại, dùng với ảnh nhị phân Mơ tả thuật tốn: Phép "giãn nở" X theo mẫu B hợp tất Bx với x thuộc X Ta có: X⊕B= -Input : Ảnh -Output: Ảnh làm tăng kích thước đối tượng, nối đứt đoạn, lấp lỗ hổng Chương trình cài đặt: import cv2 as cv import matplotlib.pyplot as plt import numpy as np # Phép giãn ảnh với kernel: [0,1,0] # [1,1,1] # [0,1,0] def dilatacao(img): 27 img = cv.threshold(img, 127, 255, cv.THRESH_BINARY)[1] img_dilatada = np.zeros(img.shape, np.uint8) for x in range(img.shape[0]): for y in range(img.shape[1]): try: if img[x][y + 1] == 255 or img[x - 1][y] == 255 or img[x][y] == 255 or img[x+1][y] == 255 or img[x][y-1] == 255: img_dilatada[x][y] = 255 else: img_dilatada[x][y] = except: continue return img_dilatada # Đường dẫn file ảnh path = 'images/morph.png' # Đọc ảnh image = cv.imread(path, 0) new_img = dilatacao(image) plt.figure(figsize=(7,7)) plt.subplot(1,2,1) plt.title('Ảnh gốc') plt.imshow(image, cmap = 'gray') plt.subplot(1,2,2) plt.title('Phép giãn ảnh') plt.imshow(new_img, cmap = 'gray') plt.show() 28 Chạy thử chương trình: 2.9 Thuật tốn co ảnh Ý tưởng: So sánh với pixel lân cận có giá trị sau thiết lập giá trị cho pixel khơng thiết lập giá trị cho pixel tại, dùng với ảnh nhị phân Mơ tả thuật tốn: Phép "co" X theo B tập hợp tất điểm x cho Bx nằm X Ta có: X Ɵ B = {x : Bx ⊆ X} -input: Ảnh -output:Ảnh làm mảnh đổi tượng, xố bỏ nhiễu chi tiết dư thừa Chương trình cài đặt: import cv2 as cv import matplotlib.pyplot as plt import numpy as np # Phép giãn ảnh với kernel: [0,1,0] 29 # [1,1,1] # [0,1,0] def dilatacao(img): img = cv.threshold(img, 127, 255, cv.THRESH_BINARY)[1] img_dilatada = np.zeros(img.shape, np.uint8) for x in range(img.shape[0]): for y in range(img.shape[1]): try: if img[x][y + 1] == 255 or img[x - 1][y] == 255 or img[x][y] == 255 or img[x+1][y] == 255 or img[x][y-1] == 255: img_dilatada[x][y] = 255 else: img_dilatada[x][y] = except: continue return img_dilatada # Đường dẫn file ảnh path = 'images/erosion.png' # Đọc ảnh image = cv.imread(path, 0) new_img = dilatacao(image) plt.figure(figsize=(7,7)) plt.subplot(1,2,1) plt.title('Ảnh gốc') plt.imshow(image, cmap = 'gray') plt.subplot(1,2,2) plt.title('Phép giãn ảnh') plt.imshow(new_img, cmap = 'gray') plt.show() 30 Chạy thử thuật toán: 2.10 Thuật tốn đóng mở Ý tưởng: phép thực liên tiếp phép co giãn + Phép đóng: thực phép giãn sau thực phép co + Phép mở: thực phép co sau thực phép giãn Mơ tả thuật tốn: Phép tốn mở (OPEN) X theo cấu trúc B tập hợp điểm ảnh X sau co giãn nở liên liếp theo B Ta có: OPEN(X,B) = (X Ɵ B) ⊕ B Phép tốn đóng (CLOSE) X theo cấu trúc B tập hợp điểm ảnh X sau giãn nở co liên B Ta có: CLOSE(X,B) = (X ⊕ B) Ɵ B -Input: Ảnh 31 -Output: Ảnh trơn biên đối tượng, loại bỏ eo hẹp, loại bỏ thành phần lồi mỏng, xoá nhiễu, làm khuyết điểm đối tượng lấp đầy lỗ hổng viền Chương trình cài đặt: import cv2 as cv import matplotlib.pyplot as plt from erosion import erosao from dilation import dilatacao # Các phép đóng mở # Phép đóng thực cách thực phép giãn(DILATION) sau thực phép co(EROSION) # Phép mở ngược lại với phép đóng thực phép co(EROSION) sau thực phép giãn(DILATION) # Đường dẫn file ảnh path = 'images/erosion.png' # Đọc ảnh image = cv.imread(path, 0) close_img = erosao(dilatacao(image)) open_img = dilatacao(erosao(image)) plt.figure(figsize=(7,7)) plt.subplot(1,3,1) plt.title('Ảnh gốc') plt.axis('off') plt.imshow(image, cmap = 'gray') plt.subplot(1,3,2) plt.title('Phép đóng ảnh') plt.axis('off') plt.imshow(close_img, cmap = 'gray') plt.subplot(1,3,3) plt.title('Phép mở ảnh') plt.imshow(open_img, cmap = 'gray') plt.axis('off') plt.show() 32 Chạy thử chương trình 2.11 Thuật tốn nén ảnh SVD (Singular Value Decomposition) Ý tưởng: Biến đổi ma trận ảnh thành ma trận nhỏ từ giảm kích thước ảnh Mơ tả thuật tốn: Một ma trận Am×n phân tích thành dạng: Am×n=Um×mΣm×n(Vn×n)T = UrΣr(Vr)T Trong đó, U,V ma trận trực giao, Σ ma trận đường chéo không vuông với phần tử đường chéo σ1≥σ2≥⋯≥σr≥0=0=⋯=0và r rank ma trận A Lưu ý Σ ma trận vng, ta coi ma trận chéo thành phần khác không nằm vị trí đường chéo, tức vị trí có số hàng số cột Số lượng phần tử khác Σ rank ma trận A 33 -Input: Ảnh -Output: Ảnh nén Chương trình cài đặt: import cv2 as cv import numpy as np import matplotlib.pyplot as plt def svd(img, n): img = np.mean(img, 2) U,s,V = np.linalg.svd(img) S = np.zeros(np.shape(img)) for i in range(0, n): S[i,i] = s[i] recon_img = U @ S @ V return recon_img img = cv.imread('cat.jpg') # Hệ số nén n = 10 recon_img = svd(img, n) plt.subplot(1, 2, 1) plt.axis('off') plt.imshow(img) plt.title('Ảnh gốc') plt.subplot(1, 2, 2) plt.imshow(recon_img) plt.axis('off') plt.title(f'Ảnh sau nén n = {n}') plt.suptitle('Nén ảnh') plt.show() 34 Chạy thử chương trình: 35 KẾT LUẬN Kết đạt Xây dựng thuật toán xử lý ảnh, Qua việc xây dựng thuật hiểu cách rõ ràng cách thức hoạt động số phương pháp xử lý ảnh phổ biến Trước phát triển mạnh mẽ xử lý ảnh phải biết nắm bắt xu thế, ưu Đánh giá Thuật toán xây dựng cịn chưa tối ưu Có thể cịn nhiều sai sót Hướng phát triển: Khắc phục nhược điểm nêu Ứng dụng thuật toán vào toán thực tế Phát triển công cụ xử lý ảnh Tài liệu tham khảo What Is Image Processing: Overview, Applications, Benefits, and Who Should Learn It [2022 Edition] (simplilearn.com) Introduction to Computer Vision and Image Processing - Home | Coursera Digital image processing - Wikipedia The Basics of Image Processing Empower your deep learning models by… | by Lavanya Gupta | WiCDS | Medium Toán Tử Khung Xương Ảnh Nhị Phân - Skeleton Binary Morphology — Computer Vision (stdio.vn) (3) [Xử lý ảnh] - Chương 1- tổng quan xử lý ảnh - Phần - YouTube 36 TRƯỜNG ĐẠI HỌC KHOA CNTT CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc KẾT QUẢ CHẤM ĐIỂM BÀI TẬP LỚN Họ tên sinh viên: Mã số SV: Lớp: Khóa: TT Nội dung Câu: 01 Câu: 02 10 Điểm Điểm chấm CB Điểm chấm chấm thi số CB chấm thi số Câu: 03 Câu: 04 Câu: 05 Câu: 06 Câu: 07 Câu: 08 Câu: 09 Câu: 10 Tổng điểm toàn 10 Tổng điểm chấm: Bằng số: Bằng chữ: Cán chấm thi số Cán chấm thi số (Ký ghi rõ họ tên) (Ký ghi rõ họ tên) Hà Nội, ngày 03 tháng 08 năm 2021 37 ... VIỆC -Thuật tốn cân histogram -Thuật tốn lọc Trung vị -Thuật toán Co (Erosion) -Thuật toán phát biên Sobel - Thuật toán nén ảnh SVD -Thuật toán phát biên Prewitt -Thuật toán lọc Gauussian -Thuật. .. xử lý ảnh ảnh “tốt hơn” kết luận 11 Quá trình xử lý ảnh - - Hệ thống xử lý ảnh máy tính tập hợp kỹ thuật xử lý ảnh phục vụ cho mục đích ứng dụng Đồ hoạ máy tính thiên tổng hợp hình ảnh, cịn xử. .. LUẬN Kết đạt Xây dựng thuật toán xử lý ảnh, Qua việc xây dựng thuật hiểu cách rõ ràng cách thức hoạt động số phương pháp xử lý ảnh phổ biến Trước phát triển mạnh mẽ xử lý ảnh phải biết nắm