Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (5.46 MB, 24 trang )
<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">
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 q 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).
</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3"><b>Mục lục: </b>
<b>1. Sơ lược về x lý nh và phép tốn hình thái </b>ử ả <b>...4 </b>
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 tốn hình thái Morphology ...5
<b>2. Thao tác hình thái h c v</b>ọ <b>ới ảnh...6</b>
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
<b>3. Kết luận ...24 </b>
</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4"><b>1. Sơ lược về xử lý ảnh và phép tốn hình thái: </b>
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ó. Q trình nhận dạng thường đi sau q 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 hố q 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
</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="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 q 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 tố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
</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">là 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 tố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 tốn đuợc hay nhận biết đuợc chúng một cách dễ dàng.
<b>2. Thao tác hình thái h c v</b>ọ <b>ới ảnh</b>
2.1. Các phép toán t p hậ ợp
<b>Phép NOT (bù) </b><i>A</i> {( , ) |<i>x yI<small>A</small></i>( , ) 1}<i>x y</i>
<b>Phép giao (AND) A B </b>∩
</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">Phép h p (OR) ợ <i>AB</i>
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
</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">2.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 vng 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 qt trên tồ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 tố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ữ “q 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:
</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">Mụ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:
<small>import cv2 </small>
<small>import numpy np as </small>
<small>img = cv2.imread("text1.png") kernel = np.ones((3 3,),np.uint8) </small>
<small>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) </small>
<small>cv2.destroyAllWindows() </small>
Ả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
</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">Trườ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.
</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">2.3. Phép co (Erosion)
Ăn mòn là quá trình ngược lại với giãn nở. Hành vi của tốn tử ăn mịn thì tương đương với việc định vị giá trị nhỏ nhất của cường độ sáng trên vùng tương ứng với nhân chập vào. Ăn mòn tạo ra một ảnh mới từ ảnh gốc bằng theo thuât toán sau: khi nhân B quét trên tồn ảnh, chúng ta tính tốn pixel có giá trị nhỏ nhất khớp với B và thay thế giá trị pixel ảnh được xác định bởi điểm neo với giá trị nhỏ nhất (để chính xác, pixel trên ảnh đầu ra sẽ đặt giá trị bằng giá trị nhỏ nhất của những pixel khởi bởi nhân trên ảnh đầu vào).
Phép ăn mòn được mơ tả bằng biểu thức tốn học như sau:
Ta có ví dụ sau đây:
</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">Mụ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
</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">Sau 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 q 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
</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">giố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 tố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
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()
</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">Câ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à q 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 tố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
</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">Thực hiện với thư viện openCV:
<small>import cv2 </small>
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)
Có một ảnh nhị phân vân tay bao gồm nhiễu và nhiều vân bị đứt nét. Sử dụng opening và closing lần lượt để loại bỏ nhiễu và nối liền các đường vân tay.
</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">2.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 l một đường bao hồ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.
</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">Phé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: ỏ
</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">2.6. Chóp nón và đáy nón (Top hat and Black hat)
Hai phép tố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:
<small>import cv2 </small>
<small>import numpy np as </small>
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.
</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">2.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 ả
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)
</div>