1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Xử lý ảnh đo kích thước vật thể realtime

26 10 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Xử Lý Ảnh Đo Kích Thước Vật Thể Realtime
Tác giả Nguyễn Văn Đức, Đặng Đức Độ, Nguyễn Bá Công
Người hướng dẫn TS. Dương
Trường học Đại học Bách Khoa Hà Nội
Chuyên ngành Cơ điện tử
Thể loại Đồ án tốt nghiệp
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 26
Dung lượng 10,22 MB

Nội dung

Khi sản xuất hàng loạt, sản phẩm rất nhiều & nhỏ, khiến cho việc kiểm trakích thước sản phẩm bằng con người trở nên hết sức khó khăn và tốn kém vì vậy, sự tiến bộ của kĩ thuật và công ng

Trang 1

ĐẠI HỌC BÁCH KHOA HÀ NỘI

TRƯỜNG CƠ KHÍ

Khoa Cơ điện tử

***************

XỬ LÝ ẢNH

Đo kích thước vật thể realtime

Đánh giá của giảng viên hướng dẫn

………

………

………

………

Giảng viên hướng dẫn: TS Dương Văn Lạc

HÀ NỘI, 7/2023

Trang 2

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

Trang 3

Kết quả đánh giá Hà Nội, ngày 31 tháng 7 năm 2023

Giảng viên hướng dẫn

Nguyễn Văn Đức

Đặng Đức Độ

Nguyễn Bá Công

Trang 4

MỤC LỤC

CHƯƠNG 1 LỜI NÓI ĐẦU 6

CHƯƠNG 2 TỔNG QUAN VỀ ĐỀ TÀI 7

2.1 Đề tài trong công nghiệp thực tế 7

2.2 Cơ sở lý thuyết cách đo kích thước vật thể bằng OpenCV thuần 8

2.3 Phương án và các thức thực hiện 9

CHƯƠNG 3 NỘI DUNG CÁC BƯỚC THỰC HIỆN 11

3.1 Lấy ảnh 11

3.1.1 Phương án sử dụng camera điện thoại 11

3.1.2 Phương án xây dựng hệ đo realtime 12

3.2 Tiền xử lý 13

3.3 Đọc ảnh 13

3.4 Chuẩn bị cho thuật toán Canny 14

3.5 Sử dụng thuật toán Canny 15

3.6 Đo kích thước của vật 16

3.6.1 Tìm đường bao vật thể 16

3.6.2 Diện tích hình chữ nhật tối thiểu bao quanh Contour 17

3.6.3 Góc quay của hình chữ nhật tối thiểu 18

3.6.4 Đo kích thước đường bao theo pixel 20

3.6.5 Đo kích thước đường bao theo millimet 22

3.7 Xuất ảnh 22

3.8 Realtime video 23

CHƯƠNG 4 KẾT LUẬN 24

Trang 5

4.1 Nhận xét và đánh giá 24

4.2 Kết quả đạt được 24

4.3 Những vấn đề khó khăn, chưa giải quyết được 25

4.4 Hướng phát triển 25

CHƯƠNG 5 TÀI LIỆU THAM KHẢO 26

Trang 6

CHƯƠNG 1 LỜI NÓI ĐẦU

Hiện nay, xử lý ảnh là một lĩnh vực đang được quan tâm rất nhiều Tại hầu hếtcác nước có nền khoa học tiên tiến trên thế giới, các loại trang thiết bị máy móc,sản phẩm thông minh được ứng dụng hầu hết vào mọi lĩnh vực

Trước đây, người ta thường chỉ sử dụng các thiết bị đo mà việc tính toán và xử líkết quả hoàn toàn là thủ công Do những yêu cầu cấp thiết trong sản xuất chế tạo

mà đo lường ngày càng phát triển Giờ đây với sự tiến bộ của các ngành cơ-điệntử-tin học và việc ứng dụng những thành tựu của kỹ thuật điện tử, công nghệ thôngtin, trí tuệ nhân tạo, vào ngành cơ khí thì xử lí ảnh và đo lường trong các hệ thống

và robot công nghiệp đã được ứng dụng ngày càng rộng rãi Nó là công cụ đểkiểm tra đánh giá chất lượng của sản phẩm, nó làm tai mắt cho các hệ thống tựđộng hóa quá trình sản xuất hay các robot thông minh, với những khả năng vượttrội so với các phương pháp truyển thống như:

 Khả năng tự xử lí và lưu trữ kết quả đo

 Thực hiện công việc đo theo chương trình

 Tự động thu thập, phân loại và báo lỗi, …

Và trong lần này, nhóm chúng em làm với một đề tài nhỏ đó là đo kíchthước vật thể, với vật thể tham chiếu được chọn là đồng xu Đề tài sử dụng thuậttoán Canny và thư viện Opencv

Trang 7

CHƯƠNG 2 TỔNG QUAN VỀ ĐỀ TÀI

2.1 Đề tài trong công nghiệp thực tế

Sản phẩm sau khi được lắp ráp hay gia công đều cần được kiểm ngoại dạngtrước khi chuyển sang công đoạn tiếp theo để đảm bảo không để lọt bất cứ sảnphẩm lỗi hay kém chất lượng nào tới khách hàng Thông thường công đoạn kiểmtra này do người thao tác (công nhân) trực tiếp dùng mắt kiểm tra với 1 quy trìnhnhất định Việc này có nhiều ưu điểm song lại không đạt được độ chính xác caonhất mà nhà sản xuất mong muốn

Từ những vấn đề đó, xử lý ảnh trong công nghiệp hiện nay phát triển có nhiềuứng dụng có thể kể đến như:

 Nhận diện/kiểm tra ngoại dạng sản phẩm

 Nhận diện/kiểm tra màu sắc

 Đo lường/kiểm tra kích thước không tiếp xúc

 Kiểm tra kí tự quang học (OCV)

 Kiểm tra mã vạch

 Điều hướng Robot

Trong những ứng dụng trên, nhóm chúng em sẽ tập trung vào ứng dụng thứ

3 đó là đo lường và kiểm tra kích thước của vật Các phép đo truyền thống đượcthực hiện với các dụng cụ đo bằng cơ (đã được hiệu chỉnh rất chính xác) và ngườithực hiện đo phải được huấn luyện về kĩ thuật đo mới đảm bảo kết quả đo có độ tincậy cao Khi sản xuất hàng loạt, sản phẩm rất nhiều & nhỏ, khiến cho việc kiểm trakích thước sản phẩm bằng con người trở nên hết sức khó khăn và tốn kém vì vậy,

sự tiến bộ của kĩ thuật và công nghệ cung cấp giải pháp đo kiểm kích thước khôngtiếp xúc dùng camera giúp xác định chính xác (cỡ dưới 10µm và bằng 10% dungsai kích thước bản vẽ) với tốc độ cao các: khoảng cách, góc, diện tích, độ khớpđường, độ khớp tròn … Từ đó nhà máy sẽ tiết kiệm được rất nhiều chi phí nhâncông, giảm được tối đa sai sót so với phương pháp đo kiểm truyền thống Ứng

Trang 8

dụng này được xử dụng trong công nghiệp rất nhiều với nhiều những hình dạng vàkích thước khác nhau Và trong lần này chúng em sẽ làm với đề tài đo kích thướccủa một số vật đơn giản.

2.2 Cơ sở lý thuyết cách đo kích thước vật thể bằng OpenCV thuần

Muốn đo kích thước vật thể trong ảnh ta phải biết được các yếu tố như:Khoảng cách từ camera đến vật khi chụp, Tiêu cự của camera, góc chụp… rấtphức tạp như hình dưới:

Với một cách đơn giản hơn, ta sẽ hiểu như sau:

Đầu tiên ta chọn một vật nào đó ta biết kích thước gọi là “Vật tham chiếu “.

Ta nên chọn một viên bi tròn hay vật gì đó hình tròn để dễ dàng hơn trongviệc tính toán Giả sử viên bi có đường kính thật D r=2 cm=20 mm

Tiếp theo ta đặt Vật tham chiếu đó vào ảnh cùng với các Vật muốn đo kích

thước và chụp một tấm

Sau đó, Giả sử ta đo được đường kính trong ảnh của Vật tham chiếu là D c=100 pixel, ta suy ra kích thước thật của 1-pixel là 20/100 = 0.2mm (goi là số P)

Bước cuối cung, ta đo kích thước trong ảnh Vật muốn đo bằng pixel, sau đó

nhân với P là sẽ ra kích thước thật của vật

Trang 9

2.3 Phương án và các thức thực hiện

Đo kích thước đồng xu qua xử lý ảnh có 2 cách chính:

 Đo khoảng cách từ camera đến nơi đặt đồng xu, góc nghiêng của camera sovới mặt phẳng chứa đồng xu, kết hợp với các thông tin về tiêu cự, vùng nhìn(FOV) và góc nhìn (AOV) để tính toán ra được diện tích đồng xu

 Nếu không sử dụng camera thì ta sẽ sử dụng mẫu chuẩn biết trước kíchthước, tính ra kích thước đồng xu theo tỉ lệ trên pixel (Cách này cần mẫuvật và đồng xu cùng nằm trong mặt phẳng FOV)

Nhóm sử dụng cách 2 để đo kích thước đồng xu

Sau khi đo kích thước đồng xu làm vật tham chiếu, nhóm sẽ đo được kích thướcmột số vật khác khi đặt vào cùng vị trí khung hình với lúc trước để nhân tỉ lệ theopixel đã quy đổi ra mm

Các bước thực hiện:

Có thể chia quá trình làm 5 bước chính như sau:

Bước 1 (Lấy ảnh): Thêm hình ảnh bằng cách sử dụng điện thoại đặt trên giá

cố định để đảm bảo hình ảnh vật mẫu và đồng xu cùng nằm trên một mặtphẳng FOV

Bước 2 (Tiền xử lý): Ta lấy dữ liệu ảnh đã thu được và thực hiện các bước

tiền xử lý Ở bước này ta sẽ dùng các hàm trong để đọc ảnh và điều chỉnhkích thước của ảnh Sau đó ta chuẩn bị cho thuật toán Canny bằng cáchchuyển sang ảnh xám và sử dụng bộ lọc Gauss để lọc nhiễu

Bước 3 (Đo kích thước của vật):

(tìm đường bao): tìm cạnh của vật bằng thuật toán Canny và xử lí

đường bao bằng cách loại bỏ các đường viền nhỏ Sau đó tính diệntích của vật bằng định lý green

(đo kích thước): sau khi tìm được các contour ta thực hiện tính toán

kích thước của nó bằng cách tìm hình chữ nhật có diện tích bé nhấtcủa contour Ta tính toán được chiều dài 2 cạnh theo pixel nhờ vào

Trang 10

các hàm trong thư viện OpenCV Và cuối cùng ta tiến hành xử lý giátrị chiều dài 2 cạnh theo pixel có ở trên để tìm được kích thước thậtbên ngoài

Bước 4 (Xuất ảnh): Ảnh đã vẽ hình bao và ghi kích thước của đồng xu và

vật mẫu Hoặc ở chế độ realtime, video xuất ra sẽ quay trực tiếp vật được đo

và ghi kích thước đo được lên khung hình camera

CHƯƠNG 3 NỘI DUNG CÁC BƯỚC THỰC HIỆN 3.1 Lấy ảnh

Trang 11

3.1.1 Phương án sử dụng camera điện thoại

Nhóm sử dụng camera điện thoại để chụp được hình ảnh của vật cần đo Để

đo được chính xác kích thước của vật, ta cần đảm bảo cố định hai yếu tố là gócchụp của camera và khoảng cách từ camera tới vật Do đó, điện thoại được gá cốđịnh trên một hệ khung như hình

Hình 2.1 Cơ cấu chụp ảnh vật

Hệ khung trên giúp cho mặt phẳng của camera luôn song song với mặtphẳng đặt vật Ngoài ra, bên dưới mặt phẳng đặt vật có đèn led giúp loại bỏ bóngcủa vật in xuống mặt phẳng, việc này giúp tạo ra các bức ảnh rõ nét và dễ dàng hơntrong khi xử lý ảnh

Trang 12

Hình 2.2 Hình ảnh của vật cần đo

3.1.2 Phương án xây dựng hệ đo realtime

Nhóm sử dụng các tấm fomex để làm thành hộp kín, có ánh sáng từ đèn điệnthoại, sau đó có chỗ để camera khác để thu hình ảnh vật đo đặt dưới đáy hộp

Sau đây là hình ảnh thu được từ hệ:

Trang 13

3.3 Đọc ảnh

Nội dung hàm bắt đầu với hàm:

image = cv2.imread(filename, flag=none)

trong thư viện cv2 Trong đó, flag là cờ chuyển đổi kiểu dữ liệu ảnh Hàm này sẽđọc từng điểm ảnh ở 3 kênh màu RGB, cho ra một mảng 3 chiều với 2 chiều đầutiên là kích thước ảnh, chiều thứ 3 là 3 kênh màu Ở đây, ta bỏ qua flag để thuđược ảnh gốc Do ảnh có độ phân giải cao, khi lấy dữ liệu sẽ cho ra ảnh lớn, nên tacần giảm kích thước ảnh mà không để ảnh sai tỉ lệ kích thước Ta sẽ sử dụng hàm:

Trang 14

image = cv2.resize(src, dsize)

trong thư viện cv2 Src là ảnh gốc (image), dsize là kích thước mới của ảnh (siz1,siz2) Kích thước mới được tính toán từ kích thước ảnh gốc, lấy được bằng đặc tínhcủa đối tượng ma trận - shape Ta lấy kích thước ảnh gốc chia 1.5 cho đến khi kíchthước lớn nhất của ảnh nhỏ hơn 1000, sau đó chuyển kích thước về số nguyên.Bước tính toán trên dưới dạng ngôn ngữ lập trình sẽ như sau:

siz1, siz2 = image shape [0:2]

while max (siz1, siz2) > 1000:

siz1 = siz1/1.5 siz2 = siz2/1.5 siz1 = int(siz1) siz2 = int(siz2) image = cv2.resize(image, (siz2, siz1))

3.4 Chuẩn bị cho thuật toán Canny

Sau khi ảnh gốc đã đạt kích thước phù hợp, muốn thực hiện thuật toán tìmcạnh Canny, ta cần chuyển ảnh sang ảnh xám để xử lý 1 kênh màu, làm mờ ảnh vớimặt nạ Gauss để xử lý nhiễu thông thấp mà cạnh của vật thể không bị biến dạngquá nhiều Ta chuyển ảnh sang ảnh xám với hàm:

gray = cv2.cvtColor(src, code)

trong thư viện cv2 Src là ảnh gốc (image), code là gọi hàm chuyển đổi không gianmàu (cv2.COLOR_BGR2GRAY) Hàm này lấy giá trị trung bình của 3 kênh màu tạimỗi pixel, ta sẽ thu được ảnh 1 kênh màu (ảnh xám) ở đầu ra Sau đó, ta sử dụnghàm:

blur = cv2.GaussianBlur(src, ksize, sigmaX)

trong thư viện cv2 Với src là ảnh gốc (gray), ksize là kích thước mặt nạ Gauss(blur_kernel, blur_kernel), sigmaX là hệ số trong đồ thị phân bố xác suất chuẩnGauss theo trục x (để bằng 0, vì đã chọn ksize nên không cần) Hàm này sử dụngmặt nạ phân bố chuẩn Gauss, thực hiện tích chập với ảnh gốc Đầu ra của hàm này

là ảnh được làm mờ

Trang 15

3.5 Sử dụng thuật toán Canny

Tiếp theo, ta sử dụng thuật toán Canny để tìm cạnh với hàm:

edged = cv2.Canny(image, threshold1, threshold2)

trong thư viện cv2 Image là ảnh gốc (blur), threshold1 là ngưỡng thấp(canny_low), threshold2 là ngưỡng cao (canny_high) Thuật toán Canny thực hiệntích chập ảnh với mặt nạ Sobel để tìm các vector vuông góc với cạnh, loại bỏ cácđiểm không phải cực đại địa phương (đưa về 0), sau đó dùng ngưỡng để chọn rathành phần cạnh và không phải cạnh Cụ thể, tích chập với ma trận Sobel có dạngnhư sau:

Trong đó, A là ma trận dữ liệu ảnh, (Gx, Gy) là vector hướng G tại từngđiểm Vector G có hướng luôn vuông góc với các đường cạnh trong ảnh (ranh giớinơi cường độ sáng có bước nhảy), có độ dài tỉ lệ với độ chênh lệch cường độ sángvới các điểm ảnh lân cận Từ giá trị độ dài của G, ta lọc cơ sở bằng cách giữ lại cácđiểm là cực đại so với 2 điểm lân cận (xét trên 4 phương), các điểm khác đưa vềgiá trị 0

Khi có được các điểm ảnh có khả năng là cạnh, ta áp đặt ngưỡng cao vàngưỡng thấp để giữ lại các cạnh đủ lớn Các điểm ảnh có (|G| > ngưỡng cao) hoặc(|G| > ngưỡng thấp và nằm cạnh điểm ảnh có |G| > ngưỡng cao) sẽ được giữ lại.Đầu ra của hàm là ảnh nền đen cạnh trắng

Để đề phòng trường hợp cạnh bị đứt đoạn nhỏ, ta sử dụng thuật toán Closinggồm 2 hàm:

edged = cv2.dilate(src, kernel) edged = cv2.erode(src, kernel)

trong thư viện cv2 Src là ảnh gốc (edged), kernel là ma trận dùng tích chập vớiảnh (có thể chỉ cần đưa vào kích thước (close_kernel, close_kernel))

Trang 16

Dilate và erode sẽ tích chập mặt nạ với ảnh, dilate đặt điểm mốc giá trị 255 khi vàchỉ khi ít nhất một điểm qua mặt nạ khác 0, còn erode thì đặt điểm mốc giá trị 255khi và chỉ khi tất cả điểm qua mặt nạ đều khác 0 Kết quả là dilate làm phần màutrắng giãn ra, cạnh bị đứt sẽ được nối liền, erode làm phần màu trắng co lại kíchthước ban đầu Như vậy là đã kết thúc bước tiền xử lý.

3.6 Đo kích thước của vật

3.6.1 Tìm đường bao vật thể

Sau bước tiền xử lý – sử dụng thuật toán Canny detection để tìm ra cạnh,đường viền của bức ảnh ta sử dụng thuật toán FindContour để tìm đường viềnmong muốn dưới dạng là chuỗi tọa độ các điểm trên đường viền (bao gồm tất cảcác đường viền và cạnh bao):

cnts=cv2.findContours(edged.copy(),cv2.RETR_EXTERNAL,cv2.CHAIN_A PPROX_SIMPLE)

Ở đây ta điền 3 tham số:

Detection, như trong code là ảnh copy từ ảnh edge đã được xử lý ở trên

bên ngoài, loại bỏ các đường viền bên trong

viền không kín

Kết quả chúng ta sẽ được tập hợp các tọa độ thuộc các đường bao

Sau đó ta tiến hành đưa các chuỗi tìm được về dạng dữ liệu Tuple (sử dụnghàm imutils.grab_contours()) trong python để xử lý các đường viền này :

cnts = imutils.grab_contours(cnts)

Tham số đưa vào là ‘cnts’ đây là kết quả lấy được từ hàm findcontour,qua hàm trên sẽ chuyển tạp hợp các tọa độ về dạng dữ liệu Tuple (nhóm các tạo độcùng thuộc 1 đường bao)

Trang 17

Tiếp theo ta tiến hành sắp xếp các đường viền theo thứ tự từ trái qua phảitrên dữ liệu vừa nhận được qua hàm:

Ở đây ta có công thức diện tích theo định lý Green:

3.6.2 Diện tích hình chữ nhật tối thiểu bao quanh Contour

Hình ảnh bên dưới hiển thị 2 hình chữ nhật, hình chữ nhật màu xanh lá cây

là hình chữ nhật bao quanh bình thường trong khi hình màu đỏ là hình chữ nhật códiện tích tối thiểu Xem cách xoay hình chữ nhật màu đỏ

Trang 18

Hình: Box chữ nhật bao quanh contour

OpenCV cung cấp một hàm cv2.minAreaRect() để tìm diện tích nhỏ nhấtđược xoay hình chữ nhật Điều này lấy đầu vào là tập hợp điểm 2D và trả về cấutrúc Box2D chứa các chi tiết sau – (tâm (x, y), (chiều rộng, chiều cao), gócquay) Cú pháp được đưa ra dưới đây:

(Center (x, y), (width, height), angle of rotation) = cv2.minAreaRect(points)

Nhưng để vẽ một hình chữ nhật, chúng ta cần 4 góc của hình chữ nhật Vìvậy, để chuyển cấu trúc Box2D thành 4 điểm góc, OpenCV cung cấp một chứcnăng khác là cv2.boxPoints() Cái này lấy cấu trúc Box2D làm đầu vào và trả về 4điểm góc 4 điểm góc được sắp xếp theo chiều kim đồng hồ bắt đầu từ điểm có ycao nhất Cú pháp được đưa ra dưới đây:

points = cv2.boxPoints(box)

3.6.3 Góc quay của hình chữ nhật tối thiểu

Như chúng ta đã biết rằng 4 điểm góc được sắp xếp theo chiều kim đồng hồbắt đầu từ điểm có y cao nhất như hình bên dưới Nếu 2 điểm có cùng y cao nhấtthì điểm ngoài cùng bên phải là điểm xuất phát Các điểm được đánh số là 0,1,2,3(0-bắt đầu, 3-kết thúc)

Trang 19

Vì vậy, góc quay được cung cấp bởi cv2.minAreaRect() của OpenCV thực

sự là góc giữa đường thẳng (nối điểm đầu và điểm cuối) và phương nằm ngangnhư minh họa bên dưới:

Do đó, giá trị góc luôn nằm trong khoảng [-90,0) Tại sao? bởi vì nếu vật thể

bị xoay hơn 90 độ, thì cạnh tiếp theo được sử dụng để tính góc so với phươngngang Và do đó, góc được tính toán luôn nằm trong khoảng [-90,0) Xem hình ảnhbên dưới trong đó đường màu xanh lá cây hiển thị đường nối điểm đầu và điểmcuối được sử dụng để tính góc Ngoài ra, hãy xem điểm bắt đầu và điểm cuối thayđổi như thế nào khi xoay đối tượng Các điểm được đánh số là 0,1,2,3 (0-bắt đầu,3-kết thúc)

Ngày đăng: 04/04/2024, 20:19

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w