3.2. Công cụ xử lý ảnh
3.2.6. Hiển thị và khám phá ảnh
3.2.6.1. Hiển thị ảnh
Để hiển thị ảnh ta dùng cú pháp sau: Imshow(ima);
Trong đó ima là một biến ảnh. Biến ảnh có thể được đọc vào từ file hay thu nhận ảnh từ thiết bị thu nhận ảnh.
Cú pháp trên Matlab tự động tạo ra một cửa sổ figure để hiển thị ảnh. Nếu đã có một cửa sổ figure được tạo ra thì ảnh ima được hiện trên figure đó và ảnh trên figure đó sẽ bị mất. Để hiển thị đồng thời nhiều ảnh thì ta dùng cú pháp sau:
Figure, imshow(imal); Figure, imshow(imal); Figure, imshow(imal);
Với cú pháp này thì Matlab sẽ tạo ra một figure mới rồi hiển thị ảnh trên cửa sổ figure đó.
Ví dụ:
Moon = imread(„moon.tif‟); Imshow(moon);
Hình 3.10.
3.2.6.2. Khám phá ảnh
Để biết thông tin về giá trị của từng điểm ảnh ta dùng cú pháp sau: imtool(ima);
Với cú pháp trên Matlab sẽ hiển thị ảnh ima trên một cửa sổ imge toool. Từ cửa sổ này ta có thể mở các cửa sổ khác để xem thông tin về ảnh như cửa sổ image Information, Adjust Constrast, pixel Region .
3.2.7.Tính toán ảnh
Tính toán trên ảnh là sự thực hiện đầy đủ các phép tính số học chuẩn như là các phép cộng, trừ, nhân, chia trên ảnh. Tính toán ảnh sử dụng rất nhiều trong xử lý ảnh ngay cả ở bước tiền xử lý đến các bước phức tạp hơn. Ví dụ phép trừ ảnh có thể được sử dụng để phát hiện sự khác biệt giưa hai han hay nhiều ảnh trong một cảnh giống nhau hoặc của một đối tượng.
Ta có thể thực hiện tính toán ảnh sử dụng các toán tử số học của Matlab. Công cụ xử lý ảnh bao gồm một tập các hàm chức năng. Các hàm này thực hiện đầy đủ các phép tính số học trên các kiểu số gồm uint8, uint16, double và trả về kết quả ảnh trong cùng định dạng
3.2.7.1. Các quy tắc làm tròn trong tính toán
Các kết quả của các phép tính số nguyên có thể dễ bị tràn. Ví dụ giá trị cực đại mà một biến thuộc kiểu uint8 có thể lưu là 255. Các phép toán có thể cho kết quả là các phân số không thể lưu trữ trong các mảng số nguyên
Các phép toán của Matlab và các hàm chức năng trong công cụ xử lý ảnh sử dụng các quy tắc sau đây cho tính toán các số nguyên. Các giá trị vượt quá khoảng giá trị của kiểu số nguyên được làm bão hòa đến giá trị cực đại của khoảng. Các phân số được làm tròn. Ví dụ nếu trong kiểu số nguyên không dấu 8 bit (uint8), các giá trị lớn hơn 255 (bao gồm cả vô cùng) được đặt là 255. Bảng dưới đây liệt kê một vài trường hợp làm tròn
Kết quả Kiểu Giá trị được làm tròn 300 Uint8 255
Nguyễn Văn Thắng – Luận văn thạc sĩ tổng quan về xử lý ảnh
10.2 Uint8 10
10.5 Uint8 11
3.2.7.2. Kết hợp các lời gọi các hàm tính toán ảnh
Ta có thể kết hợp các hàm tính toán ảnh để tạo ra một chuỗi các hoạt động ví dụ ta tính giá trị trung bình của hai ảnh
I = imread('rice.png');
I2 = imread('cameraman.tif'); K = imdivide(imadd(I,I2), 2);
Tuy nhiên cách làm này được khuyến cáo là không nên dùng vì khi sử dụng dữ liệu thuộc kiểu uint8 hoặc uint16 thì mỗi hàm tính toán sẽ làm tròn và bão hòa các kết quả của nó trước khi gửi tới hàm tính toán tiếp theo. Điều này làm giảm đáng kể đến kết quả tính toán. Trong ví dụ trên ta có thể cải thiện kết quả tính toán bằng cách sử dụng hàm imlincomb. Hàm imlincomb thực hiện kết hợp tuyến tính hai giá trị chính xác và chỉ làm tròn và bão hòa kết quả cuối cùng
K = imlincomb(.5,I,.5,I2);
Chương 4
THỰC NGHIỆM
4.1. Các phương pháp đo đạc, xử lý số liệu trong thực nghiệm
Chương này trình bày về quá trình thực nghiệm xây dựng hệ giám sát và điều khiển vi kẹp dựa vào công nghệ thị giác máy tính. Sơ đồ khối của hệ thực nghiệm như hình vẽ 4.1 dưới đây.
Hình 4.1: Sơ đồ khối hệ điều khiển vi kẹp
Sơ đồ khối của hệ điều khiển vi kẹp ở trên được đưa ra dựa trên những ý tưởng của việc điều khiển vi kẹp.
Hình 4.2 dưới đây là hệ thống điều khiển, giám sát vi kẹp mà tôi đã xây dựng trong phần thực nghiệm này. Hệ thống này được xây dựng và vận hành thử nghiệm tại viện quốc tế về khoa học vật liệu ITIMS và có kết quả tương đối ổn định.
Trong hệ thống thực nghiệm này gồm có các thiết bị: Một máy ảnh Canon G2 4.0 Mega pixels làm thiết bị thu nhận ảnh. Tín hiệu ra của máy ảnh lấy tại đầu ra A/V out là tín hiệu tương tự. Tín hiệu này được đưa qua một USB TV BOX để biến đổi thành tín hiệu số trước khi đưa vào máy tính xử lý. Máy tính được sử dụng trong hệ thực nghiệm là máy tính xách tay DELL INSPIRON 510m (Yêu cầu máy tính phải có đầy đủ cả hai cổng ghép nối là cổng LPT và cổng COM).
PC
CAMERA
Kính hiển vi
Vi kẹp
Nguyễn Văn Thắng – Luận văn thạc sĩ hệ thống thực nghiệm
Hình 4.2 Hệ thống điều khiển vi kẹp
4.1.1. Khảo sát chuyển động của vi kẹp
Để khảo sát sự chuyển động của vi kẹp bằng thị giác máy tính thì việc đầu tiên là thu nhận ảnh của đầu vi kẹp. Ảnh thu được từ thiết bị thu nhận ảnh là ảnh màu. Ta sử dụng các công cụ sẵn có của Matlab để biến đổi ảnh màu đó về ảnh đa mức xám, dùng hàm lấy biên ảnh để chuyển đổi ảnh đa mức xám về ảnh chỉ số. Các ảnh như hình dưới đây.
Hình 4. 3. (a) Ảnh gốc (b). Ảnh sau khi lấy biên
Để xác định được khoảng chuyển động của tay kẹp ta phải tính được khoảng cách giữa hai đầu tay kẹp sau mỗi lần ra lệnh đóng hay mở kẹp. Khoảng cách của hai
đầu vi kẹp ta coi chính là khoảng cách của hai mép trong của tay kẹp (tính theo đơn vị pixel).
Hình 4.4 Khoảng cách giữa hai đầu vi kẹp là L
Do cấu tạo của tay kẹp mà phần giữa của tay vi kẹp biên của nó không được thẳng. Tuy nhiên do đặc tính của thuật toán xử lý ảnh (sẽ được trình bày dưới đây) ta chỉ quan tâm đến phần dưới của vi kẹp vì vi kẹp chỉ kẹp vật ở phần dưới.
4.1.1.1. Các thuật toán để tìm L
Gọi L là khoảng cách giữa hai mép trong của vi kẹp. Để tìm được L ta phải tìm hai điểm có đánh dấu + trên hai cánh tay của vi kẹp.
Một nhận xét là một ảnh I có kích thước là x,y (x là số dòng ,y là số cột) thì mỗi phần tử của ảnh có thể truy cập tương tự như các phần tử của một ma trận ví dụ như I(x1,y1). Các ảnh chỉ số cụ thể là ảnh chứa biên của vi kẹp ở trên thì các phần tử của ảnh có giá trị là 1 tại các điểm thuộc đường biên của vi kẹp còn các điểm khác (thuộc nền đen) có giá trị là 0.
Như vậy nhìn vào ảnh ở trên ta thấy để tìm được hai điểm có dấu + ta có thể thực hiện phương pháp quét lùi
Nguyễn Văn Thắng – Luận văn thạc sĩ hệ thống thực nghiệm
a) Thuật toán quét lùi
Thuật toán quét lùi này tương đối đơn giản. Đầu tiên xuất phát từ điểm có tọa độ là (Xmax,0) tăng dần giá trị của cột từ giá trị 0 đến giá trị cực đại. Sau mỗi lần tăng ta so sánh giá trị của điểm I (Xi,Yj) với 1. Nếu giá trị tại điểm I có giá trị bằng 1 có nghĩa là điểm ảnh đó thuộc đường biên. Ghi nhớ tạo độ điểm này lại và duyệt tiếp. Nếu giá trị tại điểm I đó có giá trị bằng 0 thì tiếp tục tăng giá trị chỉ số cột lên một. Giá trị chỉ số cột tăng đến giá trị cực đại Ymax mà vẫn chưa tìm đủ 4 điểm thuộc đường biên thì ta quay về phía bên trái giảm chỉ số dòng đi 1 đơn vị và lại cho chỉ số cột tăng từ 0 đến giá trị cực đại Ymax. Cứ như thế ta sẽ tìm được một dòng nào đó chứa cả 4 điểm thuộc biên của vi kẹp.
Để ý thấy rằng hai đầu của vi kẹp không cùng nằm trên một đường thẳng nằm ngang mà tay kẹp bên phải cao hơn tay kẹp bên trái. Do đó nếu ta chỉ tìm thấy có hai điểm biên trên một dòng thì có nghĩa là hai điểm biên đó chỉ thuộc một bên của vi kẹp và ta vẫn phải giảm số dòng đi một để tìm trên các dòng khác.
Sau khi tìm được 4 điểm thuộc biên của vi kẹp trên cùng một dòng, tọa độ cột của các điểm đó được giữ bởi một mảng P(1..4) và khoảng cách giữa hai đầu vi kẹp được tính là P(3) – P(2).
Lưu đồ thuật toán như sau:
Hình 4.6 Lưu đồ thuật toán quét lùi
Begin [x,y] = size(ima) i=x k=k+1; P(k)=j; ima(i,j)=1 j=j+1; j<y i=i-1 j=1; k=0;P(1:4)=0 k=4 i>0 L=P(3)- P(2) End T T T F F F T
Nguyễn Văn Thắng – Luận văn thạc sĩ hệ thống thực nghiệm
Hình 4.7. Các tọa độ cần xác định của ảnh
Với thuật toán trên mục đích cuối cùng của chúng ta là đi tìm 4 điểm nằm trên đường biên. Nếu đường biên trơn tru không „bị vỡ‟ thì ta luôn luôn tìm được 4 điểm trong đó 2 điểm thuộc cánh tay kẹp bên trái và 2 điểm thuộc cánh tay kẹp bên phải. Tuy nhiên nếu gặp trường hợp đường biên không được như ý muốn như hình dưới đây thì thuật toán này sẽ tìm được 4 điểm thuộc biên nhưng chỉ ở một cánh tay của vi kẹp.
Hình 4.8 Ảnh phóng to của một bên kẹp khi đường biên không trơn
Như vậy công thức tính khoảng cách L không còn được đúng nữa. Ở đây không phải là do thuật toán bị sai mà là do chất lượng của ảnh thu được bị bóng hay nhòe, khiến cho việc khắc phục làm trơn ảnh là không thể được
Mặt khác thuật toán này có một nhược điểm là nếu gặp ảnh lớn thì số lần lặp sẽ là lớn dẫn đến việc không đáp ứng được thời gian thực. Có thể cải thiện thuật toán này bằng cách là không phải ở dòng nào ta cũng quét mà ta cho cách n dòng lại quét
một dòng. Như vậy thì số lần lặp sẽ giảm đi n lần, nhưng cũng phạm phải một sai số là n dòng.
Một thuật toán khác được tìm hiểu và đưa ra để cải thiện nhằm giảm bớt số lần lặp dẫn đến giảm thời gian xử lý.
b) Thuật toán quét trái phải
Thuật toán này xuất phát từ nhận xét là sự chuyển động của tay kẹp chỉ trong một phạm vi nhất định vì thế mà các tọa độ đã tìm được trong một lần duyệt sẽ thay đổi rất ít so với vị trí trước. Vì thế mà ta căn cứ vào điểm trước đó để tìm ra điểm hiện tại. Ta xuất phát từ trung điểm của hai điểm đã xác định từ lần trước ta quét về bên trái nếu gặp được biên của vi kẹp thì duyệt tiếp sang bên phải nếu cũng tìm được biên của vi kẹp thì hai điểm đó chính là hai điểm ta cần tìm. Nếu quét sang trái hoặc sang phải mà không tìm thấy biên thì giảm dòng đi 1 đơn vị và tiếp tục quay lại quét. Như vậy thì khoảng cách L sẽ được tính là tọa độ cột của điểm bên phải trừ đi tọa độ cột của điểm bên trái.
4.1.1.2. Kết quả mô phỏng các thuật toán
a) Kết quả khảo sát của thuật toán quét trái phải
Hình dưới đây là kết quả mô phỏng thuật toán quét trái phải. Nhìn vào kết quả khảo sát ta thấy lần khảo sát thứ nhất số lần lặp tương đối là lớn 17494, vì lần đầu tiên ta chưa xác định được hai điểm cần tìm của hai đầu vi kẹp. Sau khi đã tìm được hai điểm đó thì các lần sau ta căn cứ vào hai điểm đó để tìm hai điểm khác khi tay kẹp chuyển động đóng vào hay mở ra và số lần lặp giảm đi đáng kể, chỉ còn 214 lần.
Nguyễn Văn Thắng – Luận văn thạc sĩ hệ thống thực nghiệm
Kết quả khảo sát trên là sử dụng một ảnh cố định (ảnh g1.jpg) nên khoảng cách của hai đầu vi kẹp là cố định cho các lần khảo sát.
b). Kết quả khảo sát của thuật toán quét lùi
Hình 4.10 Kết quả khảo sát thuật toán quét lùi.
Hình 4.8 là kết quả khảo sát của thuật toán quét lùi. Kết quả khảo sát cũng dùng ảnh g1.jpg như trên. Nhìn vào kết quả ta thấy là số lần lặp lớn hơn rất nhiều so với thuật toán quét trái phải ở trên (35100 so với 107).
Hình 4.11. Ảnh dùng để khảo sát các thuật toán
4.2. Kết quả thực nghiệm
4.2.1. Hoạt động của hệ thống thực nghiệm
Chương trình điều khiển hệ thống được thiết kế dưới dạng giao diện cửa sổ sử dụng GUI builder của phần mềm Matlab nên việc điều khiển tương đối là dễ dàng.
Dưới đây là lưu đồ thuật toán và giao diện của chương trình
Hình 4. 12: Lưu đồ thuật toán điều khiển vi kẹp
4.2.2.1. Giao diện của chương trình
Chương trình điều khiển vi kẹp có tên là control. Sau khi khởi động chương trình điều khiển có giao diện như hình dưới đây
Bắt đầu
Cấu hình cổng COM Cấu hình thiết bị thu nhận ảnh Xác định kích thước của đối tượng
Điều khiển vi kẹp Thu nhận ảnh
Tính khoảng cách giữa hai đầu vi kẹp L
L ≤ d Kết thúc
Nguyễn Văn Thắng – Luận văn thạc sĩ hệ thống thực nghiệm
Hình 4.13. Giao diện chính của chương trình điều khiển vi kẹp
Trước khi điều khiển ta phải thiết lập cấu hình cho cổng nối tiếp và thiết bị thu ảnh. Để cấu hình cho cổng COM ta chọn Setup\serial (Ctrl + S). Dưới đây là giao diện và cách thức lựa chọn các giá trị cho việc cấu hình.
4.2.2.2. Cấu hình cho cổng Com
Cổng COM được sử dụng để xuất ra các giá trị thập phân từ 0 4095. Giá trị này được đưa qua một bộ biến đổi DA 12 bit. Kết quả sau khi biến đổi DA ta có các giá trị điện áp tương ứng từ 0V – 5V. Để có thể bắt tay được với mạch điều khiển ta cần phải thiết lập cấu hình cho cổng nối tiếp (serial port).
Trên giao diện chính của chương trình điều khiển vi kẹp ta chọn Setup\Serial Ctrl +S. Cửa sổ thiết lập cấu hình cho cổng COM hiện lên như sau:
Hình 4.14. Cấu hình phương thức truyền cho cổng COM Các giá trị cần thiết lập là: Các giá trị cần thiết lập là:
Cổng kết nối (Select serial COM1, COM2, COM3, COM4) thường chọn cổng COM1 Tốc độ truyền (baudrate) (chọn là 9600)
Số bit data trong một khung truyền (chọn là 8) Số bit stop trong một khung truyền (chọn là 1)
Trên hình là các thông số cần lựa chọn để cầu hình. Trước khi cấu hình cho cổng nối tiếp nào đó (Thường là COM1) ta phải thực hiện đóng cổng lại (click vào nút Close all port) để tránh xung đột.
Sau khi lựa chọn tất cả các thông số trong các hộp combobox ta click vào nút setup để thiết lập cấu hình. Để kiểm tra việc kết nối giữa chương trình điều khiển với mạch điều khiển ta có thể kiểm tra bằng cách nhập một giá trị điện áp bất kỳ (0 – 5V) vào ô textbox bên phải rồi click vào nút out(volt). Đo lối ra trên mạch nếu giá trị đo được bằng với giá trị nhập có nghĩa là việc kết nối đã được thực hiện
Có thể kiểm tra bằng một vài giá trị điện áp khác nhau.
4.2.2.3. Cấu hình cho thiết bị thu nhận ảnh
Một thiết bị thu nhận ảnh bất kỳ có các thuộc tính cho phép người dùng có thể thay đổi phù hợp với mục đích sử dụng. Các thuộc tính có thể thay đổi này đã được trình bày trong chương 3 mục thiết bị thu nhận ảnh.
Hình dưới đây là giao diện cho phép lựa chọn các giá trị của các thuộc tính của thiết bị thu nhận ảnh
Nguyễn Văn Thắng – Luận văn thạc sĩ hệ thống thực nghiệm