Tải bản đầy đủ (.docx) (21 trang)

Tiểu luận xử lí ánh nhận dạng đối tượng

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 (512.81 KB, 21 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HỒ CHÍ MINH
KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP


BÁO CÁO ĐỀ TÀI
XỬ LÝ ẢNH
Tên đề tài:

Đếm số lượng viên thuốc trong vỉ sử dụng phần mềm MATLAB.
GVHD: TS. Nguyễn Thanh Hải
SVTH:

THÀNH PHỐ HỒ CHÍ MINH, THÁNG 5 NĂM 2017

MỤC LỤC


B¸o c¸o m«n häc Xö lý ¶nh

GVHD: TS. NguyÔn Thanh H¶i

BẢNG PHÂN CÔNG CÔNG VIỆC

2


B¸o c¸o m«n häc Xö lý ¶nh

GVHD: TS. NguyÔn Thanh H¶i



Chương 1: GIỚI THIỆU YÊU CẦU – GIỚI HẠN
1.1 TỔNG QUAN VÀ LÍ DO CHỌN ĐỀ TÀI
Xử lí ảnh đang là một lĩnh vực được quan tâm và đã trở thành một phần quan
trọng, liên quan đến nhiều ngành, nhiều lĩnh vực: hệ thống thông tin, thống kê, trí
tuệ nhân tạo và công nghệ nhận dạng. Đây là một lĩnh vực tương đối mới mẻ so
với các ngành khoa học khác, nó gồm nhiều quá trình liên tục: nhận tín hiệu hình
ảnh từ camera, cảm biến … sẽ được số hóa thành tín hiệu số và trải qua nhiều giai
đoạn xử lí, phân tích. Đặc biệt những năm gần đây, xu hướng tự động hóa ngày
càng phổ biến trong môi trường công nghiệp.
Xuất phát từ thực tế trên, nhằm kết hợp xử lí ảnh vào môi trường công nghiệp,
nhóm chúng em quyết định chọn đề tài: “Đếm số lượng viên thuốc trong vỉ sử
dụng phần mềm MATLAB” để nghiên cứu. Với đề tài này, hy vọng trong tương lai
có thể thay thế được yếu tố con người trong những khâu kiểm tra số lượng sản
phẩn như hiện nay.
1.2 MỤC TIÊU VÀ GIỚI HẠN.
1.2.1 Mục tiêu

Mục đích chính của nhóm nghiên cứu, tìm hiểu phần mềm MATLAB để
giao tiếp giữa máy tính và camera nhằm thu thập dữ liệu hình ảnh và lấy các thông
tin cần thiết để xử lí. Đồng thời, sử dụng các thuật toán có sẵn để xây dựng một
chương trình có khả năng đếm được số lượng viên thuốc, nâng cao hiệu suất và
giảm yếu tố con người.
1.2.2 Giới hạn

Chương trình này chỉ nằm ở mức độ cơ bản: đọc ảnh từ camera vào latop, xử
lí bằng phương pháp đơn giản nhằm nhận biết được đối tượng viên thuốc và đếm
được số lượng có trong vỉ, xuất kết quả ra màn hình.

3



B¸o c¸o m«n häc Xö lý ¶nh

GVHD: TS. NguyÔn Thanh H¶i

Chương 2: MATLAB TRONG XỬ LÝ ẢNH
2.1 GIỚI THIỆU
Matlab là một công cụ tính toán trong kỹ thuật, đặc biệt là các bài toán về
ma trận. Ngoài ra, phần mềm Matlab còn cung cấp các toolboxes chuyên dụng để
giải quyết những vấn đề cụ thể như xử lý ảnh, xử lý số tín hiệu, neuron, mô
phỏng…
Matlab cung cấp Image Processing toobox, chuyên về xử lý ảnh. Có thể nói
Matlab là một công cụ giúp chuyên dụng cho việc thực hiện các giải thuật xử lý
ảnh nhanh chóng và dễ hiểu.
2.2 CÁC HÀM CƠ BẢN.
2.2.1 Hàm imread().

Lênh imread() sẽ đọc một file thành một ma trận. Matlab trợ giúp rất nhiều
định dạng đồ hoạ thông dụng chẳng hạn: BMP, GIF, JPEG, PNG, TIFF …
VÍ DỤ:
img = imread('ImageProcessing_1/BerkeleyTower.png');

2.2.2 Hàm imshow() và imagesc()

Để hiển thị hình ảnh trong matlab ta dùng 2 lệnh sau imshow() và imagesc().
Lệnh imshow () cho chúng ta một hình ảnh trong định dạng tiêu chuẩn là 8-bit,
giống như trong một trình duyệt web. Lệnh imagesc () hiển thị các hình ảnh trên
các trục đồ thị với giá trị min là màu đen và giá trị tối đa là màu trắng.
VÍ DỤ:


img = imread('ImageProcessing_1/BerkeleyTower.png');
imshow(img);
imagesc(img);

2.2.3 Hàm imwrite()

Để lưu một ảnh, chúng ta sử dụng câu lệnh imwrite(). Cấu trúc cơ bản nhất
của imwrite() sẽ yêu cầu một biến ảnh và tên file. Nếu ta gộp một phần mở rộng
trong tên file, Matlab sẽ nhận ra định dạng mong muốn từ nó.
VÍ DỤ:

4


B¸o c¸o m«n häc Xö lý ¶nh

GVHD: TS. NguyÔn Thanh H¶i

imwrite(blue_img, 'Blue4_BerkeleyTower.png', 'png');

2.2.4 Hàm Imadjust()

Imadjust() điều chỉnh giá trị cường độ hình ảnh. Câu lệnh này làm tăng độ
tương phản của hình ảnh đầu ra.
VÍ DỤ:

img = imread('ImageProcessing_1/Rachmaninoff.jpg');
gray = rgb2gray(img);
adj_img = imadjust(gray, [0.3,0.7],[]);


2.2.5 Hàm im2bw()

Im2bw() chuyển đổi các hình ảnh màu xám, màu sang một hình nhị phân.
Hay tạo một ảnh nhị phân từ một ảnh cường độ, ảnh chỉ số hay ảnh RGB trên cơ sở
của ngưỡng ánh sáng.
VÍ DỤ:

img = imread('ImageProcessing_1/Rachmaninoff.jpg');
gray = rgb2gray(img);
adj_img = imadjust(gray, [0.3,0.7],[]);
bw_img = im2bw(adj_img);

2.2.6 Hàm bwareaopen().

Xóa các pixel nhỏ hơn giá trị đặt trước
VÍ DỤ:

BW2 = bwareaopen(BW, 50);

2.2.7 Hàm viscircles()

Vẽ vòng tròn xung quanh đối tượng được chọn.
VÍ DỤ:

viscircles(centersBright, radiiBright,'Color','b');

2.2.8 Các hàm chuyển đổi kiểu ảnh.

dither: Tạo một ảnh nhị phân từ một ảnh cường độ đen trắng bằng cách

trộn, tạo một ảnh chỉ số từ một ảnh RGB bằng cách trộn (dither).
gray2id: Tạo một ảnh chỉ số từ một ảnh cường độ đen trắng.
grayslice: Tạo một ảnh chỉ số từ một ảnh cường độ đen trắng bằng cách
đặt ngưỡng.
5


B¸o c¸o m«n häc Xö lý ¶nh

GVHD: TS. NguyÔn Thanh H¶i

im2bw: Tạo một ảnh nhị phân từ một ảnh cường độ, ảnh chỉ số hay ảnh
RGB trên cơ sở của ngưỡng ánh sáng.
ind2gray: Tạo một ảnh cường độ đen trắng từ một ảnh chỉ số.
ind2rgb: Tạo một ảnh RGB từ một ảnh chỉ số.
mat2gray: Tạo một ảnh cường độ đen trắng từ dữ liệu trong một ma trận
bằng cách lấy tỉ lệ giữ liệu.
rgb2gray: Tạo một ảnh cường độ đen trắng từ một ảnh RGB.
rgb2ind: Tạo một ảnh chỉ số từ một ảnh RGB.

6


B¸o c¸o m«n häc Xö lý ¶nh

GVHD: TS. NguyÔn Thanh H¶i

Chương 3: THIẾT KẾ SƠ ĐỒ KHỐI
3.1 SƠ ĐỒ KHỐI.


Hình 3-1: Sơ đồ khối

3.2 CHỨC NĂNG CÁC KHỐI.
Hoạt động của các khối có thể được hiểu như sau:
Thu thập dữ liệu (Data Collection)
Trước hết là thu thập ảnh. Chất lượng của ảnh thu được quyết định nhiều đến
kết quả của việ nhận dạng. Sau đó ảnh phải được lưu trữ theo một định dạng phù
hợp với các bước xử lý sau này.
Tiền xử lý (Pre-processing)
Bước này tăng khả năng nhận dạng chính xác, có vai trò nâng cao chất
lượng ảnh trước khi đem phân tích và nhận dạng. Công việc của bước này thường
là khử nhiễu, biến đổi ảnh và nâng cao một số đặc tính quan trọng của ảnh.
Phân đoạn ảnh (Segmentation)
Quá trình này sẽ chia ảnh ra thành các vùng con khác nhau, nó có ý nghĩa
cho việc phân lớp.
Trích chọn đặc trưng (Feature Extraction)
Đây là bước biểu diễn các mẫu bằng các đặc trưng của đối tượng. Trong quá
trình này, ảnh sẽ được thu gọn lại. Điều này hết sức cần thiết cho việc tiết kiệm bộ
nhớ trong việc lưu trữ và thời gian tính toán. Một phương pháp trích chọn đặc
trưng tốt nếu như nó trích cọn các đặc trưng của đối tượng mà các đặc trưng đó sẽ
giúp cho việc phân biệt được các lớp mẫu khác nhau, đồng thời nó cũng biến đổi
7


B¸o c¸o m«n häc Xö lý ¶nh

GVHD: TS. NguyÔn Thanh H¶i

được các thuộc tính cố hữu của đối tượng hay do các thiết bị thu nhận ảnh tạo ra.
Việc trích chọn các đối tượng đặc trưng của đối tượng là việc lựa trọn ra các yếu tố

hình học.
Nhận dạng đối tượng (Object Identity)
Hệ thống nhận dạng, các kết quả nhận dạng lại được xử lý tiếp để đưa ra
được nhiều thông tin hữu ích hơn. Quá trình này có thể hoạt động độc lập hoặc có
liên hệ với bước phân đoạn và dò biên. Trong các bước của quá trình nhận dạng
trên thì bước trích chọn đặc trưng và bước phân đoạn là hai bước quan trọng quyết
định cho phương pháp nhận dạng. Các kỹ thuật nhận dạng thường tập trung vào
việc cải tiến phương thức hoạt động của hai bước này.
Đếm số lượng
Sau khi nhận dạng được đối tượng, sẽ đếm số lượng đối tượng để hiển thị.
Hiển thị
Hiển thị thông tin về đối tượng và số lượng cần nhận dạng.

8


Chương 3: Xử lý nâng cao chất lượng ảnh

Chương 4: CƠ SỞ LÝ THUYẾT
4.1 CÁC LOẠI BỘ LỌC.
Nhiễu có nhiều loại nhưng có thể chia thành hai loại nhiễu chính là nhiễu
cộng và nhiễu nhân. Ví dụ, nhiễu nhân như là biến số độ rọi, còn nhiễu cộng
thường là nhiễu không có thực như nhiễu xung, nhiễu Gaussian.
Hoặc ta có thể phân ra các loại nhiễu sau đây:


Nhiễu do thiết bị thu nhận ảnh




Nhiễu ngẫu nhiên độc lập



Nhiễu do vật quan sát

Thường người ta xấp xỉ các loại nhiễu bằng các quá trình tuyến tính bất biến
vì có nhiều công cụ tuyến tính có thể giải quyết vấn đề phôi phục ảnh cũng như
tăng cường ảnh hơn so với phi tuyến và hơn nữa còn cho phép xử lý dễ dàng hơn
trên máy tính.
Từ các vấn đề trên ta có thể xây dựng các loại bộ lọc sau:
4.1.1 Bộ lọc thông thấp

Bộ lọc thông thấp lý tưởng có hàm truyền như sau:
Với D0 được chỉ định là một giá trị không âm, D(u,v) là khoảng cách từ điểm
(u,v) đến trung tâm của bộ lọc. Cần phải nhớ rằng quỹ đạo của các điểm D(u,v)
=D0 là hình tròn.
Bộ lọc thông thấp Butterworth (Butterworth LowPass Filter – BLPF) bậc n
với tần số cắt tại giá trị khoảng cách D0, có hàm truyền như sau:
Hàm chuyển đổi của bộ lọc thông thấp Gaussian (GLPF) được cho như sau:
Với là độ lệch chuẩn. Bằng cách tay 0, chúng ta có được dạng triển khai như
sau:
Trong MATLAB, chúng ta có thể sử dụng hàm lpfilter được xây dựng sẵn để
xây dựng hàm dành cho bộ lọc thông thấp.

9


Chương 3: Xử lý nâng cao chất lượng ảnh


4.1.2 Bộ lọc thông cao lý tưởng

Có khả năng chúng ta muốn tăng cường chi tiết nhỏ của hình ảnh thay vì
việc xóa bỏ chúng. Việc xử lý được gọi là shapening và nó tăng cường các dao
động nhỏ trong cường độ ảnh của nhiễu.
Bộ lọc thông cao giữ lại thành phần tần số cao và loại bỏ thành phần tần số
thấp. Cho bộ lọc thông cao có hàm truyền Hlp(u,v), chúng ta dễ dàng có được bộ
lọc thông cao bằng cách:
Trong MATLAB, chúng ta có thể sử dụng hàm lpfilter được xây dựng sẵn để
xây dựng hàm dành cho bộ lọc thông cao.
4.1.3 Lọc trung vị (median filter)

Kỹ thuật lọc này thường dùng ma trận 3x3, 5x5, 7x7 di chuyển khắp mặt
phẳng ảnh. Điểm trung tâm của cửa sổ sẽ ứng với điểm ảnh được lọc, giá trị của
điểm ảnh này sẽ được thay thế bằng trung vị của chuỗi số là tập các giá trị thuộc
cửa sổ.
v[m,n]) = median { u[m-k,n-l], (k,l)∈ cửa sổ }
Trung vị của chuỗi số có 2n+1 số là số nằm giữa các số khác nếu chuỗi số
được sắp xếp theo thứ tự theo thứ tự tăng dần hoặc giảm dần. Nếu trường hợp có
2n số thì trung vị sẽ là trung bình cộng của hai số trung tâm.
Vậy thuật toán dùng cho bộ lọc trung vị được thực hiện theo hai bước:


Sắp xếp các phần tử ảnh thuộc cửa sổ theo thứ tự tăng dần hoặc giảm
dần. Cần dùng thuật toán sắp xếp hiệu quả nhất.



Chọn ra phần tử trung vị (có chỉ số n2/2 + 1) rồi thay thế giá trị điểm
ảnh trung tâm của cửa sổ bằng giá trị trung vị đó. Riêng đối với giá trị

trên biên thì giữ nguyên giá trị.

Cửa sổ dùng trong bộ lọc trung vị là loại dấu thập phân thay cho loại vuông,
cho ta kết quả khả quan hơn.

Thay thế

Sắp xếp
Trung vi

10


Chương 3: Xử lý nâng cao chất lượng ảnh

Lọc trung vị là lọc phi tuyến. Nó chỉ lọc hiệu quả với nhiễu nhị phân còn đối
với nhiễu Gaussian thì không. Khi số điểm nhiễu trong cửa sổ chiếm hơn một nửa
thì hiệu quả nhiễu sẽ giảm đi nhiều.
4.2 CÁC PHƯƠNG PHÁP NÂNG CAO CHẤT LƯỢNG ẢNH.
Nâng cao chất lượng là bước cần thiết trong xử lý ảnh nhằm hoàn thiện
một số đặc tính của ảnh. Nâng cao chất lượng ảnh gồm hai công đoạn khác
nhau: tăng cường ảnh và khôi phục ảnh. Tăng cường ảnh nhằm hoàn thiện các
đặc tính của ảnh như:
- Lọc nhiễu, hay làm trơn ảnh,
- Tăng độ tương phản, điều chỉnh mức xám của ảnh,
- Làm nổi biên ảnh.
Các thuật toán triển khai việc nâng cao chất lượng ảnh hầu hết dựa trên
các kỹ thuật trong miền điểm, không gian và tần số. Toán tử điểm là phép biến
đổi đối với từng điểm ảnh đang xét, không liên quan đến các điểm lân cận khác,
trong khi đó, toán tử không gian sử dụng các điểm lân cận để quy chiếu tới điểm

ảnh đang xét. Một số phép biến đổi có tính toán phức tạp được chuyển sang miền
tần số để thực hiện, kết quả cuối cùng được chuyển trở lại miền không gian
nhờ các biến đổi ngược.
Khái niệm về toán tử điểm:
Xử lý điểm ảnh thực chất là biến đổi giá trị một điểm ảnh dựa vào giá trị
của chính nó mà không hề dựa vào các điểm ảnh khác. Có hai cách tiệm cận với
phương pháp này. Cách thứ nhất dùng một hàm biến đổi thích hợp với mục đích
hoặc yêu cầu đặt ra để biến đổi giá trị mức xám của điểm ảnh sang một giá trị
mức xám khác. Cách thứ hai là dùng lược đồ mức xám (Gray Histogram). Về
mặt toán học, toán tử điểm là một ánh xạ từ giá trị cường độ ánh sáng u (m, n) tại
toạ độ (m, n) sang giá tri cường độ ánh sáng khác v (m, n) thông qua hàm f(.), tức
là:
V (m,n) = f (u(m,n))
4.2.1 Tăng độ tương phản (Stretching Contrast)
Ảnh số là tập hợp các điểm, mỗi điểm có giá trị độ sáng khác nhau. Ở đây,
độ sáng để mắt người dễ cảm nhận ảnh song không phải là quyết định. Thực tế
chỉ ra rằng hai đối tượng có cùng độ sáng nhưng đặt trên hai nền khác nhau sẽ
cho cảm nhận sáng khác nhau. Như vậy, độ tương phản biểu diễn sự thay đổi độ
sáng của đối tượng so với nền. Nói một cách khác, độ tương phản là độ nổi của
điểm ảnh hay vùng ảnh so với nền. Như vậy, nếu ảnh có độ tương phản kém, ta
11


Chương 3: Xử lý nâng cao chất lượng ảnh

có thể thay đổi tùy ý theo ý muốn.
Ảnh với độ tương phản thấp có thể do điều kiện sáng không đủ hay không
đều, hoặc do tính không tuyến tính hay biến động nhỏ của bộ cảm nhận ảnh. Để
điều chỉnh lại độ tương phản của ảnh, cần điều chỉnh lại biên độ trên toàn dải hay
trên dải có giới hạn bằng cách biến đổi tuyến tính biên độ đầu vào (dùng hàm

biến đổi là hàm tuyến tính) hay phi tuyến (hàm mũ hay hàm lôgarit). Khi dùng
hàm tuyến tính các độ dốc α, β, γ phải chọn lớn hơn một trong miền cần dãn. Các
tham số a và b (các cận) có thể chọn khi xem xét lược đồ xám của ảnh. Chú ý,
nếu dãn độ tương phản bằng hàm tuyến tính ta có:
α = β = γ =1
α, β, γ > 1
α, β, γ < 1

ảnh kết quả trùng với ảnh gốc
dãn độ tương phản.
co độ tương phản

4.2.2 Xử lí lược đồ (Histogram)

Histogram của một ảnh xám có L mức xám khác nhau, là một hàm rời rạc có
biểu thức:
trong đó: là giá trị mức xám thứ k trong đoạn [0,L-1]
là số pixels có giá trị mức xám là rk
Histogram thường được chuẩn hóa, với n là số tổng pixels của ảnh,
histogram chuẩn hoán được tính bằng công thức:
Trong MATLAB, chúng ta có thể xem lược đồ histogram bằng hàm imhist.
4.3 PHƯƠNG PHÁP NHẬN DẠNG ĐỐI TƯỢNG
Trong phương pháp này mẫu sẽ được biểu diễn dưới dạng số và thủ rục phân
lớp chính là việc sắp xếp các giá trị số này thành các lớp.
4.3.1 Trích chọn đặc trưng

Nhiệm vụ đặt ra cho bước này là phải rút ra các thuộc tính đặc trưng riêng
của đối tượng trong vùng ảnh được tách ra. Sau đó mỗi đặc tính của đối tượng sẽ
được mô tả dưới dạng số, các giá trị này tập hợp thành vector mô tả mầu. Thực
hiện nhiệm vụ này bao gồm hai công việc:

Giảm nhỏ tập số liệu
Tập trung vào các số liệu đó để phân lớp các thông tin thiết yếu
12


Chương 3: Xử lý nâng cao chất lượng ảnh

Cho đến nay thì chưa có một phương pháp tón học tối ưu nào để đáp ứng
được yêu cầu trên. Các chuyên gia vẫn phải dựa vào trực giác và khả năng tưởng
tượng để tìm ra đặc trưng thích hợp của đối tượng.
Có một số phương pháp lựa chọn sau:


Phương pháp lưới



Phương pháp cung



Phương pháp biến đổi Fourier
4.3.2 Kỹ thuật phân lớp mẫu

Có hai dạng phân lớp là phân lớp mẫu giám sát và phân lớp mẫu không giám
sát. Với phương pháp nhận số dạng mẫu, ta sẽ đi sâu trình bầy về kỹ thuật phân lớp
giám sát.


Nguyên lý phân lớp

Như đã xét ở một bước trích chọn đặc trưng, các đặc trưng của đối tượng
được biểu diễn bằng các giá trị số và các giá trị này được xem là các thành phần
của vector biểu diễn mẫu. Khi ta đưa vào hệ thống một tập các mẫu chuẩn thì quá
trình trích chọn đặc trưng sẽ tạo lên các vector mẫu chuẩn phân bố trong không
gian mẫu. Với mỗi vector mẫu ta đã ánh xạ được từ nó sang không gian diễn dịch,
tức là biết được tên nó. Như vậy vector mẫu chuẩn này hoàn toàn có thể phân
thành lớp ứng với một tên. Những lớp này gọi là lớp chuẩn.
Một lớp thực sự sẽ chiếm một phần nào đó trong không gian của mẫu, và
vùng của một lớp thường gọi là một cluster. Thực tế không gian mẫu không phải
bao giờ cũng phân tách hoàn toàn mà các cluster có thể chồng lên nhau.
4.3.3 Phương pháp nhận dạng cấu trúc



Biểu diễn các đặc trưng mẫu bằng phân lớp có cáu trúc
Bên cạnh phương pháp số là một trong những phương pháp nhận dạng mẫu.
Trong khi với phương pháp mẫu người ta thực hiện gand ý nghĩa cho các mẫu
riêng biệt thì phưong pháp cấu trúc lại xem xét các đối tượng phức tạp được cấu
thành từ các dạng nguyên thủy và mối liên hệ giữa chúng. Các đặc trưng quan hệ
giữa các dạng nguyên thủy sẽ làm việc với một danh sách quyết định gần như bộ
phân tích ảnh của não người. Việc mô hình hóa quá trình như vậy trên máy tính sẽ
trở lên khó khăn, bởi vậy thủ tục cấu trúc không được phổ biến như thủ tục số.

13


Chương 5: CHƯƠNG TRÌNH MATLAB THỰC TẾ
5.1 CODE

function varargout = untitled5(varargin)

gui_Singleton = 1;
gui_State = struct('gui_Name',
mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @untitled5_OpeningFcn, ...
'gui_OutputFcn', @untitled5_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before untitled5 is made visible.
function untitled5_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to untitled5 (see VARARGIN)
% Choose default command line output for untitled5
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes untitled5 wait for user response (see UIRESUME)
% uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line.
function varargout = untitled5_OutputFcn(hObject, eventdata, handles)
14


varargout{1} = handles.output;
% --- Executes on button press in Browser.
function Browser_Callback(hObject, eventdata, handles)
[filename, pathname] = uigetfile({'*.png';'*.jpg';'*.tif';'*.*'}, 'Pick a MATLAB
code file');
if pathname ~= 0
A=imread([pathname,filename]);
End
if pathname ~= 0
% imshow(testima);
subplot(2,2,1)
imshow(A)
xlabel('Anh goc')
level = 0.732;
I2 = im2bw(A,level); % level = 0-1
subplot(2,2,2)
imshow(I2)
xlabel('Anh nhi phan')
I2= bwareaopen(I2,3000);
Rmin = 10;
Rmax = 100;
[centersDark, radiiDark] = imfindcircles(A,[Rmin
Rmax],'ObjectPolarity','bright');
subplot(2,2,3)
BW = imfill(I2,'holes');

imshow(BW);
xlabel('Nhi phan sau hieu chinh');
subplot(2,2,4)
imshow(A);
xlabel('Nhan dang vien thuoc')
h=viscircles(centersDark, radiiDark);
CC = bwconncomp(BW);
CC = num2str(CC.NumObjects);
set(handles.Number1,'string',CC);
s = regionprops(BW,'Centroid');
tam = cat(1,s.Centroid);
% hien thi
hold on
plot(tam(:,1),tam(:,2),'+r')
15


end
% --- Executes on button press in Close.
function Close_Callback(hObject, eventdata, handles)
% hObject handle to Close (see GCBO)
choice=questdlg('Do you want to exit the program?');
switch choice
case 'Yes'
close
case 'No'
end
5.2 GIẢI THÍCH.
Chọn ảnh vỉ thuốc vào từ máy tính và hiển thị.
[filename, ip_filepath]=uigetfile('*.tif;*.jpg;*png');

full_path = strcat(ip_filepath,filename);
I=imread(full_path);
subplot(2,2,1)
imshow(I)
xlabel('Anh goc')
Sau đó biến đổi thành ảnh xám.
Gray_image=rgb2gray(I);
subplot(2,2,2)
imshow(Gray_image)
xlabel('Anh xam')
Biến đổi thành ảnh nhị phân, với giá trị level dựa trên thực nghiệm có được và
nhận thấy level = 0.732 là thích hợp nhất.
level = 0.732;
I2 = im2bw(I,level); % level = 0-1
subplot(2,2,3)
imshow(I2)
xlabel('Anh nhi phan')

16


Sau đây là bảng so sánh giữa các mức level khác nhau:
level

0.5

0.6

0.65


0.7

0.732

0.8

Ảnh
nhị
phân
level
Ảnh
nhị
phân

Xóa các pixel có giá trị nhỏ và làm tăng cường ảnh.
I2= bwareaopen(I2,3000);
BW = imfill(I2,'holes');
subplot(2,2,4)
imshow(BW);
xlabel('Anh tang cuong')
Nhận dạng đối tượng viên thuốc.
Rmin = 10;
Rmax = 100;
[centersDark, radiiDark] = imfindcircles(I,[Rmin Rmax],'ObjectPolarity','bright');
figure
imshow(I);
xlabel('Nhan dang vien thuoc')
h=viscircles(centersDark, radiiDark);
Đếm số lượng và xác định tâm để có thể biết được viên thuốc nào sai lệch vị trí
(sản phẩm lỗi).

% Dem so luong doi tuong
CC = bwconncomp(BW);
msgbox(['So luong vien thuoc: ',num2str(CC.NumObjects)]);
s = regionprops(BW,'Centroid');
tam = cat(1,s.Centroid);
hold on
plot(tam(:,1),tam(:,2),'+r')

17


Chương 6: KẾT QUẢ THỰC HIỆN.
Một vài hình ảnh kết quả đã thực hiện với những vỉ thuốc thực tế:

18


19


Chương 7: KẾT LUẬN
Nhóm đã thực hiện tổng cộng 15 lần với các hình ảnh có độ tương phản và
góc chụp khác nhau. Qua đây, nhóm nhận thấy chỉ có 11/15 lần cho kết quả đúng
theo yêu cầu ban đầu (tỉ lệ khoảng 73.33%).
Nhóm đã tìm ra được nguyên nhân chủ yếu dẫn đến sự sai lệch này như
sau:
Độ tương phản của mỗi tấm hình mà camera chụp được là khác nhau, khi
biến đổi thành ảnh nhị phân phải tùy thuộc vào điều kiện của mỗi tấm hình mà
chọn một ngưỡng phù hợp. Việc chọn ngưỡng không phù hợp sẽ dẫn đến không thể
nhận dạng và đếm được số lượng.

level

0.5

0.6

0.65

0.7

0.732

0.8

Ảnh
nhị
phân
level
Ảnh
nhị
phân



Cùng một tấm ảnh, nhưng nếu chọn ngưỡng khác nhau sẽ cho ra kết quả
khác nhau.

20



TÀI LIỆU THAM KHẢO
1.

[1]

TS. Nguyễn Thanh Hải, Giáo trình Xử lý ảnh, NXB Đại học

Quốc gia Tp. Hồ Chí Minh, năm 2017.
2.

[2]

Báo cáo nhận dạng đối tượng cơ bản,

Ngày truy cập: 12/5/2016 – 16:41:00
3.

[3]

Object detection in computer vision,

discovery/object-detection.html, Ngày truy cập:
12/5/2016 – 16:41:00
4.

[4]

Learning to Count Objects in

Images, ~vgg/research/counting/, Ngày truy cập:

12/5/2016 – 16:41:00
5.

6.
7.
8.
9.

10.
11.

21



×