Trong báo cáo này chỉ mô tả một vài phuơng pháp tiền xử lý hình ảnh, chú trọng đến ảnh nhị phân, bởi ảnh của các bản vẽ kỹ thuật thuờng chỉ là ảnh 2 màu: đen, trắng để cải thiện chất luợ
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA TP.HCM
-
Đề tài: Hình thái học (Morphological Filtering) GVHD: Võ Tu n Ki ấ ệt
Trang 2GIỚ I THIỆU ĐỀ TÀI
Hình ảnh là một dạng dữ liệu đóng vai trò quan trọng trong việc trao đổi, xử lý, lưu giữ thông tin Trong nhiều ngành nghề, trong một số các loại hình công việc, nguời ta đều cần đến hình ảnh để mô tả, minh chứng hay diễn đạt những điều mà đôi khi chữ viết hay ngôn ngữ nói không lột tả hết đuợc Đặc biệt trong hầu hết các một số ngành công nghiệp như: cơ khí chế tạo, chế biến và sản xuất việc đọc hình ảnh có thể nói là thuờng xuyên và cực kỳ quan trọng Bản vẽ kỹ thuật (một dạng của hình ảnh) chính là kết quả ngôn ngữ kỹ thuật Mà qua nó, một qui trình công nghệ phải đuợc xây dựng trong quá trình sản xuất, cũng nhu nó chính là cơ sở cho việc nghiệm thu cho bất kỳ sản phẩm nào Để lưu ảnh của các tài liệu, các bản vẽ hoặc sửa đổi chúng và chuyển chúng sang các dạng đồ hoạ khác tiện cho việc nhận dạng, đối sánh mẫu để sử dụng sau này là điều cần thiết Nhưng phải tổ chức việc lưu các dạng hình ảnh này nhu thế nào? Có cần xử lý gì truớc khi lưu chúng không? Câu trả lời là có Do vậy tiền xử lý ảnh là việc cần làm Có nhiều phuơng pháp, nhiều công cụ, nhiều phần mềm xử lý ảnh đã ra đời Tăng cuờng chất luợng ảnh, mà công đoạn đầu tiên là một buớc tiền xử lý nhằm loại bỏ nhiễu, khắc phục những khiếm khuyết
do buớc thu nhận ảnh không tốt là việc làm quan trọng Có nhiều phuơng pháp cho việc nâng cao chất luợng ảnh nói chung và tiền xử lý nói riêng Trong báo cáo này chỉ mô tả một vài phuơng pháp tiền xử lý hình ảnh, (chú trọng đến ảnh nhị phân, bởi ảnh của các bản
vẽ kỹ thuật thuờng chỉ là ảnh 2 màu: đen, trắng) để cải thiện chất luợng hình ảnh bằng các thao tác Hình thái học (Morphology)
Trang 3Mục l ục:
1 Sơ lược về x lý nh và phép toán hình thái ử ả 4
1.1 Xử lý ảnh 4
1.2 Các quá trình x ử lý ảnh 4
1.3 Khái niệm về phép toán hình thái Morphology 5
2 Thao tác hình thái h c vọ ới ảnh 6
2.1 Các phép toán t p hậ ợp 6
2.2 Phép giãn (Dilation) 8
2.3 Phép co (Erosion) 9
2.4 Phép mở (Opening) 13
2.5 Phép đóng (Closing) 15
2.6 Phương pháp lấy đường bao (Boundary Extraction) 17
2.7 Chóp nón và đáy nón (Top hat and black hat) 19
2.8 Xương hóa (Skeletonize) 20
2.9 Khung lồi (Convex hull) 21
3 K ết luận 24
Trang 41 Sơ lược về xử lý ảnh và phép toán hình thái:
1.1 Xử lý ảnh
Cũng như xử lý dữ liệu bằng đồ hoạ, xử lý ảnh số là một lĩnh vực của tin học ứng dụng Xử lý dữ liệu bằng đồ họa đề cập đến những ảnh nhân tạo, các ảnh này được xem xét như là một cấu trúc dữ liệu và được tạo ra bởi các chương trình Xử lý ảnh số bao gồm các phương pháp và kỹ thuật để biến đổi, để truyền tải hoặc mã hóa các ảnh tự nhiên Mục đích của xử lý ảnh gồm:
Thứ nhất: biến đổi và làm đẹp ảnh
Thứ hai: tự động phân tích nhận dạng ảnh hay đoán nhận ảnh và đánh giá các nội dung của ảnh
Nhận dạng ảnh là quá trình liên quan đến các mô tả đối tượng mà người ta muốn đặc
tả nó Quá trình nhận dạng thường đi sau quá trình trích chọn các đặc tính chủ yếu của đối tượng Có hai kiểu mô tả đối tượng:
- Mô tả tham số (nhận dạng theo tham số)
- Mô tả theo cấu trúc (nhận dạng theo cấu trúc)
Nhận biết và đánh giá các nội dung của ảnh là sự phân tích một hình ảnh thành những phần có nghĩa để phân biệt đối tượng này với đối tượng khác Dựa vào đó ta có thể mô tả cấu trúc của hình ảnh ban đầu
Có thể liệt kê một số phương pháp nhận dạng cơ bản như nhận dạng biên của một đối tượng trên ảnh, tách cạnh, phân đoạn hình ảnh Kỹ thuật này được sử dụng nhiều trong
y học (xử lý tế bào, nhiễm sắc thể)
Trong thực tế, người ta đã áp dụng kỹ thuật nhận dạng khá thành công với nhiều đối tượng khác nhau như: Nhận dạng ảnh vân tay, nhận dạng chữ (chữ cái, chữ số, chữ có dấu) Nhận dạng chữ in hoặc đánh máy trong văn bản phục vụ cho việc tự động hoá quá trình đọc tài liệu, tăng nhanh tốc độ và chất lượng thu nhận thông tin từ máy tính, nhận dạng chữ viết tay (với mức độ ràng buộc khác nhau về cách viết, kiểu chữ,
1.2 Các quá trình x ử lý ảnh
Trang 5- Thu nhận ảnh: có thể nhận được qua camera màu hoặc đen trắng, đây là loại ảnh tương tự
- Tiền xử lý: sau bộ phận thu nhận ảnh, ảnh có thể bị nhiễu hoặc độ tương phản thấp nên cần đưa vào bộ tiền xử lý để nâng cao chất lượng ảnh Chức năng: lọc nhiễu, tăng hoặc giảm độ tương phản
- Phân đoạn ảnh : là tách ảnh đầu vào thành các vùng để biểu diễn, phân tích và nhận dạng ảnh
- Biểu diễn ảnh : các vật thể sau khi được phân đoạn có thể được mô tả dưới dạng chuỗi các điểm và biểu diễn ảnh thường được sử dụng khi ta quan tâm đến đặc tính bên trong của vùng ảnh Vd : đường cong , hình dạng … quá trình biểu diễn ảnh là việc biến đổi các số liệu của ảnh thành dạng thích hợp và cần thiết cho quá trình xử lý bằng máy tính
- Nhận dạng và nội suy : là quá trình phân loại vật thể dựa trên cơ sở các chi tiết mô
tả vật thể và nhận dạng ảnh là quá trình xác định ảnh và quá trình này thu được băng cách
so sánh với mẫu đã được lưu trữ từ trước
- Cơ sở tri thức : các quá trình xử lý liệt kê trong hình thức xử lý ảnh, được thực hiện dưới sự giám sát và thực hiện dựa trên cơ sở các kiến thức về lĩnh vực xử lý ảnh 1.3 Khái niệm về phép toán hình thái Morphology
Hiểu một cách đầy đủ thì ” Morphology ” là hình thái và cấu trúc của đối tượng, hay nó diễn tả những phạm vi và các mối quan hệ giữa các phần của một đối tượng Hình thái học quá quen thuộc trong các lĩnh vực ngôn ngữ học và sinh học Trong ngôn ngữ học, hình thái học là sự nghiên cứu về cấu trúc của từ, tập hợp từ, câu và đó cũng
Trang 6là một lĩnh vực nghiên cứu từ nhiều năm nay Còn trong sinh học, Hình thái học lại chú trọng tới hình dạng của một cá thể hơn; nghiên cứu hình dạng của một nhóm vi khuẩn, dựa trên các đặc điểm nhận dạng để phân biệt chúng thuộc nhóm vi khuẩn nào, v.v Tuỳ theo truờng hợp cụ thể mà có một cách phân lớp phù hợp với nó: Có thể phân lớp dựa trên những hình dạng bao quanh nhu (elip, tròn, ), kiểu và mức độ của những hình dạng bất quy tắc (lồi, lõm, ), những cấu trúc trong (lỗ, đuờng thẳng, đuờng cong, )
mà đã đuợc tích luỹ qua nhiều năm quan sát
Tính khoa học của Hình thái học số chỉ mới thực sự phát huy khả năng của nó
kể từ khi máy tính điện tử số ra đời và đã làm cho Hình thái học trở nên thông dụng,
có nhiều tính năng mới Những đối tuợng ảnh trong Hình thái học hầu như là tập hợp của các điểm ảnh, nhóm lại theo cấu trúc 2 chiều Những thao tác toán học cụ thể trên tập hợp điểm đó đuợc sử dụng để làm rõ (tái hiện ) những nét đặc trung của những hình dạng, do vậy mà có thể tính toán đuợc hay nhận biết đuợc chúng một cách dễ dàng
2 Thao tác hình thái h c vọ ới ảnh
2.1 Các phép toán t p hậ ợp
Phép NOT (bù) A {( , ) |x y I A( , ) 1}x y
Phép giao (AND) A B ∩
Trang 7Phép h p (OR) ợ A B
Phép XOR
Hit and Fit
Fit: tất cả pixel trong y u t c u trúc s ph hế ố ấ ẽ ủ ết pixel trên ảnh
Hit: Bất kì 1 pixel trong y u t c u trúc ph lên 1 pixel trên nh ế ố ấ ủ ả
Miss: Trường h p còn lại ợ
Ví dụ: A :Fit
B: Hit
C: Miss
Trang 82.2 Phép giãn nở (Dilation)
Phép giãn là quá trình chập của những bức ảnh ( hay vùng ảnh), chúng ta gọi chúng
là A, với một số nhân, chúng ta gọi chúng là B Nhân có thể có nhiều hình dạng và kích thước khác nhau, nhưng chỉ có một điểm gọi là điểm neo duy nhất Thông thường, nhân là một khối hình vuông hay hình đĩa nhỏ với điểm neo nằm ở tâm Nhân có thể được nhận định như là mẫu hay mặt nạ và nó có ý nghĩa trong thuật toán giãn nở là để định vị phần tử
có giá trị lớn nhất Khi nhân B được quét trên toàn ảnh, chúng ta tính toán được giá trị pixel lớn nhất của vùng ảnh được khớp bởi nhân B và thay thế pixel xác định bởi điểm neo bằng giá trí lớn nhất đã tính toán Điều này khiến cho miền sáng của bức ảnh được mở rộng như
đồ hình sau Chính việc mở rộng này là gốc của thuật ngữ “quá trình giãn nở”
Tuy nhiên với vai trò bình đẳng của A và B, ta coi A là cấu trúc và B là ảnh thìkhi đó:
Ta có ví dụ sau đây:
Trang 9Mục đích phương pháp này giúp:
Với những hình ảnh bị đứt nét có thể nối kiền lại
Với những pixel nhiễu xung quanh đối tượng sẽ trở thành viền của đối tượng
Giúp nổi bật đối tượng trong ảnh hơn
Thực hiện với thư viện openCV:
import cv2
import numpy np as
img = cv2.imread( "text1.png" )
kernel = np.ones(( 3 3 , ) , np.uint8)
imgDialation = cv2.dilate(img , kernel , iterations = 1 )
imgDialation3 = cv2.dilate(img , kernel , iterations = 3 )
cv2.imshow( "Dialation image" , imgDialation)
cv2.imshow( "Dialation3 image" , imgDialation3)
cv2.waitKey( 0 )
cv2.destroyAllWindows()
Ảnh ngõ vào img được đọc qua lệnh cv2.imread
Ma trận kernel là phần tử cấu trúc 3x3 với các phần tử đều bằng 1
Hàm cv2.dilate dùng để giãn ảnh với ma trận kernel và số lần lặp lại ‘iterations’ Kết quả mô phỏng trên Pycharm: Ví dụ 1 cho đoạn văn bản
Trang 10Trường hợp lặp lại 3 lần phép giãn:
Ví dụ 2 cho vật thể, dùng để giãn nở vùng sáng
Trang 11Phép ăn mòn được mô tả bằng biểu thức toán học như sau:
Ta có ví dụ sau đây:
Trang 12Mục đích phương pháp này giúp:
Loại bỏ những pixel nhiễu cô lập
Loại bỏ những pixel nhiễu xung quanh đối tượng giúp cho phần viền (cạnh) của đối tượng trở nên mịn hơn
Loại bỏ lớp viền (cạnh) của đối tượng giúp đối tượng trở nên nhỏ hơn và đặt những pixel viền đó trở thành lớp nền của đối tượng
Thực hiện với thư viện openCV:
import cv2
import numpy np as
img = cv2.imread("Phep co.png")
kernel = np.ones((3 3,),np.uint8)
imgEroded = cv2.erode(img, kernel, iterations=1)
imgEroded3 = cv2.erode(img, kernel, iterations=3)
cv2.imshow("image", img)
cv2.imshow("Eroded image", imgEroded)
cv2.imshow("Eroded3 image", imgEroded3)
cv2.waitKey(0)
cv2.destroyAllWindows()
Tương tự phép dãn và dùng hàm cv2.erode dùng để co ảnh với phần tử cấu trúc
‘kernel’ với số lần lặp lại ‘iterations’
Kết quả mô phỏng trên Pycharm:
Ảnh gốc
Trang 13Sau khi sử dụng phép co 1 lần
Sau khi sử dụng phép co 3 lần 2.3 Phép mở (Opening)
Hiệu quả của sự xử lý ảnh hình thái phục rất nhiều vào việc kết hợp giữa sự giãn nở và
ăn mòn, và do vậy chúng tạo nên những phép toán xử lý hình thái mới trong số đó có phép
mở và phép đóng các ảnh hình thái
Nhờ thứ tự thực hiện các quá trình ăn mòn lên một ảnh hình thái A bởi một đối tượng cấu trúc B trước, rồi tiếp đến thực hiện tiếp quá trình giãn nở cũng bởi chính phần tử cấu trúc B đó, ta thu được sự mở các lỗ hổng trong một ảnh thái; các lỗ hổng này có hình dạng
Trang 14giống như hình dạng của một cấu trúc B Đó chính là phép mở
Phép mở được mô tả bằng biểu thức toán học sau :
Như vậy Phép mở (Opening) là thực hiện phép co rồi bắt đầu thực hiện phép giãn với một cấu trúc Giúp làm mượt các đường viền, phá vỡ các khe nhỏ, loại bỏ các đối tượng nhỏ, làm mượt các đỉnh lồi
Ta có ví dụ sau:
Thực hiện với thư viện openCV:
import cv2
import numpy np as
img = cv2.imread("test phep mo.png")
kernel = np.ones((7 7,),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
cv2.imshow("image", img)
cv2.imshow("opening image", opening)
cv2.waitKey(0)
destroyAllWindows()
Trang 15Câu lệnh cv2.morphologyEx để thực hiện phép mở hoặc đóng với phần tử cấu trúc kernel 7x7
Kết quả mô phỏng:
2.4 Phép đóng (Closing)
Ngược lại với sự mở rộng và loại bỏ các lỗ hổng nhỏ là quá trình làm kín Ảnh A được làm kín bởi B được thực hiện bởi quá trình làm giãn nở trước , tiếp theo là một quá trình
ăn mòn
Phép đóng được mô tả bằng biểu thức toán học sau :
Như vậy phép đóng (Closing) giúp làm mượt các đường viền, loại bỏ các lỗ nhỏ, làm mượt các đỉnh khe hẹp
Ta có ví dụ sau đây
Trang 16Thực hiện với thư viện openCV:
import cv2
import numpy np as
img = cv2.imread("test phep dong.png")
kernel = np.ones((9 9,),np.uint8)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
cv2.imshow("image", img)
cv2.imshow("closing image", closing)
Trang 172.5 Phương pháp lấy đường bao (Boundary Extraction)
Phép lấy đường bao áp d ng cho ụ ảnh xám đượ thực hiệc n m t cách nhanh chóng ộVới ảnh xám, chúng ta th y r ng giá tr c a phép toán s cho ta biêt nhiấ ằ ị ủ ẽ ều điều v s bi n ề ự ếđổi nhanh chóng của ảnh sáng Phép toán này thường dùng để tách đường bao của vùng sáng để chúng ta có thể đối xử với chúng như là một đ i tưố ợng hoàn ch nh ( hay nh ng ỉ ữphần hoàn chỉnh c a nhủ ững đối tượng) Đường bao kín của vùng ảnh được tìm th y nh ầ ờvào s ph n bù gi a phiên b n m r ng c a vùng nh và ph n thu h p cự ầ ữ ả ở ộ ủ ả ầ ẹ ủa vùng để ại lmột đường bao hoàn chỉnh Đây chính là một cách để phát hiện mép, viền của các đối tượng trong ảnh
Trang 18Phép lấy đường bao được được mô t b ng bi u th c toán hả ằ ể ứ ọc sau:
Ta có ví dụ sau đây:
Thực hiện với thư viện openCV
import cv2
import numpy np as
img = cv2.imread("test duong bao.png")
kernel = np.ones((3 3,),np.uint8)
eroded = cv2.morphologyEx(img, cv2.MORPH_ERODE, kernel)
bound = cv2.subtract(img, eroded)
cv2.imshow("image", img)
cv2.imshow("bound image", bound)
cv2.waitKey(0)
cv2.destroyAllWindows()
Kết quả mô ph ng: ỏ
Trang 192.6 Chóp nón và đáy nón (Top hat and Black hat)
Hai phép toán chóp nón (Top Hat) và đáy nón( Black Hat) dùng để tách riêng từng phần, mi n sáng hay tề ối hơn so với các lân c n trậ ực tiếp c a chúng Ta s s dủ ẽ ử ụng chúng
để tách những phần của m t vật thể mà chúng cho thấy độ sáng thay đổi ch có quan hệ ộ ỉ
với vật mà chúng dính vào
Thực hiện với thư viện openCV:
import cv2
import numpy np as
img = cv2.imread("test top hat.png")
kernel = np.ones((5 5,),np.uint8)
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel,
iterations=3)
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel,
iterations=3)
cv2.imshow("image", img)
cv2.imshow("top hat image", tophat)
cv2.imshow("black hat image", blackhat)
cv2.waitKey(0)
cv2.destroyAllWindows()
Kết qu : ả
Nhận xét:
Top hat là sự khác bi t giệ ữa hình ảnh đầu vào và "m " hình ở ảnh đầu vào
Black hat là s khác biự ệt giữa việc "đóng" hình ảnh đầu vào và hình ảnh đầu vào
Trang 202.7 Xương hóa (Skeletonize)
Giống như sự mở rộng và kép kín, việc tạo khung xương và xác định các đường bao của các đối tượng trong nh là nh ng chả ữ ức năng dựa trên s giãn nự ở và ăn mòn.Tạo khung xương là hiệu ứng giảm tất cả các đối tượng chỉ còn các đường mà không làm thay đổi cấu trúc chủ yếu của một ảnh
Nguyên t c là lắ ấy ảnh gốc ăn mòn rồi lại giãn n v i nhân chở ớ ữ thập, lấy ảnh gốc trừ đi kết quả giãn nở được một khoảng dư ra, rồ ộng t t c phi c ấ ả ần dư ra ta được kết qu ảCode:
import cv2
import numpy np as
img = cv2.imread('test skel.png',0)
size = np.size(img)
skel = np.zeros(img.shape, np.uint8)
ret, img = cv2.threshold(img, 127 255, , )
element = cv2.getStructuringElement(cv2.MORPH_CROSS, (33))
done = False
while not ( done):
eroded = cv2.erode(img, element)
temp = cv2.dilate(eroded, element)
temp = cv2.subtract(img, temp)
skel = cv2.bitwise_or(skel, temp)
Trang 212.8 Khung lồi (Convex hull )
Bất kỳ vùng / hình dạng nào được cho là l i nồ ếu đường nối hai điểm bất kỳ (được chọn t vùng bên trongừ ) được chứa hoàn toàn trong vùng đó Một cách khác để nói điều này là, để một hình có dạng lồi, tất cả các góc bên trong của nó phải nhỏ hơn 180 độ hoặc tất cả các đỉnh ph i m v phía trung tâm ả ở ề
Ví dụ: