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

Đồ án phân loại sản phẩm theo màu sắc và kích thước sử dụng MATLAB

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 (1.07 MB, 36 trang )

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

Chương 4
XỬ LÝ ẢNH

4.1 LÝ THUYẾT XỬ LÝ ẢNH
4.1.1 Giới thiệu
Trong những năm gần đây, xử lý hình ảnh (image processing) đã đạt
được nhiều thành tựu và tiến bộ vượt bậc. Trong đó, nhận dạng và phân loại
hình ảnh là một trong những lĩnh vực được theo đuổi một cách tích cực
nhất. Ý tưởng cốt lõi của việc nhận dạng và phân loại hình ảnh là phân tích
ảnh từ các dữ liệu thu được bởi các cảm biến hình ảnh như camera,
Webcam… Nhờ các hệ thống xử lý ảnh, con người đã giảm được khối
lượng công việc cũng như tăng sự chính xác trong việc đưa ra các quyết
định liên quan đến xử lý hình ảnh trên nhiều lĩnh vực: quân sự và quốc
phòng, robotics, các hệ thống an ninh, dây chuyền sản xuất tự động…
Nhận dạng và phân tích ảnh là một lĩnh vực liên ngành. Để thực hiện tốt
công việc nhận dạng và phân tích này, đòi hỏi người nghiên cứu phải am
hiểu nhiều lĩnh vực trong đó đặc biệt là các lĩnh vực liên quan tới cảm biến,
các hệ thống xử lý ảnh, các giải thuật xử lý hình ảnh/tín hiệu, phần cứng và
phần mềm, các hệ thống tích hợp…
Mục đích của báo cáo này là trình bày một phương pháp nhận dạng
và phân loại sản phẩm theo màu sắc và kích thước. Theo đó, em sẽ lần lượt
trình bày về cơ sở lý thuyết của việc xử lý ảnh, nhận dạng vật thể,chương
trình MATLAB với các hộp công cụ về khảo sát và xử lý ảnh.

Hệ thống phân loại theo kích thước và khối lượng



TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

Quy trình xử lý ảnh bao gồm các bước cơ bản sau:
Thu nhận ảnh

Tiền xử lý ảnh Phân đoạn ảnh

Xử lý ảnh Nhận dạng và nội suy

Cơ sở tri thức

Hình 3.1: Các bước trong quy trình xử lý ảnh
- Thu nhận ảnh (Image Acquisition): Có thể thu nhận ảnh màu hoặc
ảnh đen trắng qua camera. Chất lượng ảnh thu phụ thuộc vào thiết bị thu,
ánh sáng …
- Tiền xử lý ảnh (Image Processing): Có chức năng lọc nhiễu, nâng
độ tương phản nhằm làm cho ảnh rõ hơn, nét hơn, sáng hơn.
- Phân đoạn ảnh (Segmentation): Có chức năng chia ảnh thành các
vùng thành phần để phân tích và nhận dạng ảnh.
- Xử lý ảnh (Image Process): Có chức năng loại bỏ nhiễu xung
quanh đối tượng cần xử lý, giúp biểu diễn các đặc tính của ảnh chi tiết hơn.
- Nhận dạng và nội suy ảnh (Image Recognition and Interpretation):
Nhận dạng ảnh bằng cách so sánh với mẫu chuẩn được lưu từ trước. Nội
suy là dựa trên cơ sở nhận dạng để phán đoán.
- Cơ sở tri thức (Knowledge Base): Xây dựng và mở rộng các
phương pháp tiếp nhận và xử lý ảnh theo trí tuệ con người.

4.1.2 Các vấn đề cơ bản trong hệ thống xử lý ảnh


Điểm ảnh (Picture Element)

Hệ thống phân loại theo kích thước và khối lượng


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

Gốc của ảnh (ảnh tự nhiên) là ảnh liên tục về không gian và độ sáng.
Để xử lý bằng máy tính (số), ảnh cần phải được số hoá. Số hoá ảnh là sự
biến đổi gần đúng một ảnh liên tục thành một tập điểm phù hợp với ảnh
thật về vị trí (không gian) và độ sáng (mức xám). Khoảng cách giữa điểm
ảnh đó được thiết lập sao cho mắt người không phân biệt được ranh giới
giữa chúng. Mỗi một điểm như vậy gọi là điểm ảnh (PEL: Picture Element)
hay gọi tắt là Pixel. Trong khuôn khổ ảnh hai chiều, mỗi Pixel ứng với cặp
tọa độ (x,y).
Như vậy, điểm ảnh (Pixel) là một phần tử của ảnh số tại toạ độ (x,y) với
độ xám hoặc màu nhất định. Kích thước và khoảng cách giữa các điểm ảnh
đó được chọn thích hợp sao cho mắt người cảm nhận sự liên tục về không
gian và mức xám (hoặc màu) của ảnh số gần như ảnh thật. Mỗi phần tử
trong ma trận được gọi là một phần tử ảnh.


Độ phân giải của ảnh
Theo định nghĩa ở trên thi mỗi Pixel gồm một cặp toạ độ (x,y) và màu.


Độ phân giải của ảnh chính là tích số của giá trị lớn nhất của x với giá trị
lớn nhất của y.
Ví dụ: Màn hình máy tính có nhiều loại với độ phân giải khác nhau: màn
hình CGA (Color Graphic Adaptor) có độ phân giải 320 x 200; màn hình
VGA (Video Graphic Array) độ phân giải 1280 x 800.
Rõ ràng màn hình có độ phân giải càng cao thì ta có cảm giác nó càng
‘mịn’ hơn so với loại có độ phân giải thấp hơn.


Mức xám (Gray level)
Mức xám là kết quả sự mã hoá tương ứng một cường độ sáng của mỗi

điểm ảnh với một giá trị số – kết quả của quá trình lượng tử hoá.
Các thang giá trị mức xám thông thường: 16,32,64,128,256. Trong đó
mức 256 được dùng rất phổ biến do máy tính dùng 1 byte (8 bit) để biểu
Hệ thống phân loại theo kích thước và khối lượng


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

diễn mức xám, mà mức xám lại dùng 1 byte để biểu diễn: 2 8=256 mức, tức
là từ mức 0 đến mức 255.
Ảnh đen trắng: là ảnh có hai màu đen, trắng (không chứa màu khác ) với
mức xám ở các điểm ảnh có thể khác nhau.
Ảnh nhị phân: ảnh chỉ có 2 mức đen trắng phân biệt tức dùng 1 bit mô
tả 21 mức khác nhau hay mỗi điểm ảnh nhị phân chi có 1 trong 2 giá trị

hoặc là 1 hoặc là 2.
Ảnh màu: với mỗi điểm ảnh thì người ta dùng 3 byte để mô tả mức màu
(do thế giới màu được tạo nên từ 3 màu cơ bản: đỏ (red), lục (blue) và lam
(green). Do đó có 28*3 =224=16,7 triệu màu.


Biểu diễn ảnh
Trong biểu diễn ảnh, người ta thường dùng các phần tử đặc trưng của

ảnh là pixel. Do đó ta có thể biểu diễn một ảnh bởi một hàm 2 biến chứa
thông tin. Các mô hình biểu diễn ảnh cho ta một mô tả logic hay định lượng
các tính chất của hàm này. Chất lượng ảnh hoặc tính hiệu quả của các kỹ
thuật xử lý phụ thuộc vào nhiều yếu tố như: độ phân giải, nhiễu,...
Để xử lý được ảnh, thì ảnh đó phải được lấy mẫu (sample) rồi lượng tử
hoá (quantization). Tức là đầu tiên chuyển từ ảnh tương tự sang ảnh số sau
đó lưu giá trị của từng điểm ảnh với một số hữu hạn các mức xám.


Tăng cường và khôi phục ảnh
-

Tăng cường ảnh (image enhancement):

Khi ảnh được chuyển từ dạng này sang dạng khác bởi các quá trình như:
truyền ảnh, quét ảnh,… thì ảnh nhận được thường có chất lượng thấp hơn
so với ảnh ban đầu. Để giúp người ta có thể quan sát bức ảnh một cách
chính xác hơn thì đòi hỏi phải có biện pháp để nâng cao chất lượng ảnh.
Quá trình này được gọi là tăng cường ảnh (image enhancement).

Hệ thống phân loại theo kích thước và khối lượng



TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

Tăng cường ảnh giúp loại bỏ các suy giảm (degradation) gây ra bởi hệ
thống xử lý hoặc kênh xử lý ảnh. Ngày nay, nhu cầu phát triển các hệ
thống tự động cho việc xử lý hình ảnh ngày càng phát triển, kéo theo nó là
sự cần thiết trong việc loại bỏ sai số cũng như các yếu tố nhiễu trong quá
trình xử lý. Do đó, tăng cường ảnh có thể được coi như một tập hợp các kỹ
thuật để nâng cao chất lượng hình ảnh đồng thời tập hợp này cũng được
ding để nâng cao độ chính xác trong quá trình tìm kiếm tự động và chuyển
đổi dạng của bức ảnh.


Khôi phục ảnh (image restoration):

Khôi phục ảnh là quá trình loại bỏ các suy giảm (degradation) trong
ảnh. Có nhiều nguyên nhân dẫn đến sự suy giảm.
Khi camera không tập trung tiêu cự một cách hợp lý có thể dẫn đến bức
ảnh bị ‘nhòe’.
Khi chụp ảnh trong điều kiên thời tiết không thuận lợi: sương mù, qúa
nắng nóng,… cũng có thể làm cho bức ảnh bị ‘nhòe’.
Chụp ảnh các vật đang chuyển động cũng có thể gây ‘nhòe’ cho bức ảnh.
Do có nhiều nguyên nhân gây nên suy giảm ảnh vì vậy, đối với mỗi
loại nguyên nhân phải có các cách phục hồi khác nhau. Khôi phục ảnh phần
lớn được thực hiện bằng cách tìm ra các giải thuật nhằm phục hồi lại các
thông tin bị thất lạc trong quá trình xử lý ảnh.

Chúng ta cũng cần phân biệt tăng cường ảnh với khôi phục ảnh:
trong khi tăng cường ảnh nhằm tăng chất lượng của bức ảnh thì khôi phục
ảnh nhằm đưa lại hình ảnh gốc của bức ảnh đã bị suy giảm. Các kỹ thuật
tăng cường ảnh không áp dụng được với khôi phục ảnh.


Biến đổi ảnh (image transformation)

Hệ thống phân loại theo kích thước và khối lượng


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

Thuật ngữ biến đổi ảnh thường dùng để nói tới các kỹ thuật dùng để
biến đổi ảnh. Ở đây ảnh có thể được coi như một chuỗi các tín hiệu một
chiều được biểu diễn bởi các hàm cơ sở. Có nhiều biến đổi được dùng như:
biến đổi Fourier, cosin, sin, karhumen loeve,…


Phân tích ảnh (image analysis)
Sau các bước tiền xử lý ảnh, ảnh đã được tăng cường hay được khôi

phục để làm nổi các đặc trưng chủ yếu. Lúc này nó bắt đầu được đưa vào
quá trình phân tích. Quá trình phân tích ảnh gồm các công đoạn: trích chọn
các đặc tính (feature extraction), phân đoạn ảnh (segmentation) thành các
phần tử. Tuỳ theo mục đích của việc xử lý, các giai đoạn tiếp theo của quá
trình phân tích ảnh có thể là nhận dạng ảnh (phân thành các lớp có miêu tả)

hay là giải thích, miêu tả ảnh hoặc phân loại ảnh.

Ảnh vào

Trích chọn
Hình vẽ trang 115
đặc tính

Phân
đoạn

Phân loại
Giải thích

Quá trình tiền XL
Hình 4. 2 Các bước trong phân tích ảnh
Phân tích ảnh thường dựa trên việc phân tích các đặc trưng của ảnh:
mật độ xám, phân bố xác suất, phân bố không gian, biên ảnh…


Nhận dạng ảnh (recognition of image partterns):
Khi một bức ảnh đã được phân đoạn, nhiệm vụ tiếp theo là nhận dạng

vật thể hoặc vùng đã được phân đoạn. Mỗi một vật thể là một thành phần ở
trong ảnh và các giá trị đo được là các đặc tính của thành phần đó. Một tập
Hệ thống phân loại theo kích thước và khối lượng


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58


MÁY CHÍNH XÁC

các vật thể cùng có các đặc tính giống nhau được gọi là một ‘lớp vật thể’
(pattern class).
Theo đó có thể định nghĩa, nhận dạng là quá trình phân loại các đối
tượng được biểu diễn theo một mô hình nào đó và gán cho chúng vào một
lớp (gán cho đối tượng một tên gọi) dựa theo những quy luật và các mẫu
chuẩn.
Sự nhận dạng ảnh thường dựa trên nhiều tính chất của vật và với mỗi
tính chất đều có các kỹ thuật nhận dạng khác nhau. Ví dụ: Hình tròn và
hình chữ nhật. Một số tính chất của các vật thể 2 hoặc 3 chiều là diện tích,
thể tích, chu vi, bề mặt,… có thể đo được thông qua việc tính toán số
‘pixel’. Tương tự như vậy, hình dạng của một vật được đặc trưng bởi
đường biên của nó.
Mầu của một vật cũng là đặc điểm hết sức quan trọng được dùng
trong nhận dạng. Kỹ thuật dùng để phát hiện các đặc tính của vật thể gọi là
kỹ thuật trích chọn đặc tính (feature extraction). Khi đó vật thể được miêu
tả như một tập các đặc tính. Sự lựa chọn và tách lấy các tính chất thích hợp
được coi như là vấn đề cơ bản đầu tiên trong nhận dạng ảnh.


Phân loại thành phần ảnh (classification of image patterns)
Phân loại là một công đoạn quan trọng trong quá trình nhận dạng

vật. Đã có nhiều kỹ thuật phân loại được sử dụng trong việc nhận dạng
thành phần. Một số kỹ thuật phân loại được biết như là những kỹ thuật lý
thuyết chính xác. Với những kỹ thuật lý thuyết chính xác này, phân loại
một thành phần chưa biết được quyết định dựa trên một số nguyên tắc
hoặc đã xác định hoặc có ý nghĩa thống kê hoặc thậm chí đôi khi còn chưa

được xác định rõ.

Hệ thống phân loại theo kích thước và khối lượng


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

4.2 XỬ LÝ ẢNH VỚI MATLAB

4.2.1 Giới thiệu về MATLAB
MATLAB là ngôn ngữ lập trình bậc cao dùng cho kỹ thuật. Đồng thời
nó là môi trường tương tác có thể thực hiện nhiều nhiệm vụ: phát triển giải
thuật, phân tích dữ liệu, tính toán các phép tính số học và hình ảnh hóa dữ
liệu. So với các ngôn ngữ lập trình truyền thống như C, C++ hay Fortran
thì MATLAB có nhiều ưu điểm hơn do được tích hợp các hỗ trợ rất mạnh.
MATLAB được sử dụng trong nhiều lĩnh vực ứng dụng bao gồm: sử
lý tín hiệu và hình ảnh, truyền thông, thiết kế điều khiển, kiểm tra và đo
lường, phân tích và mô hình hóa các thông tin tài chính, tính toán trong hóa
sinh… Ngoài ra, MATLAB còn được tích hợp các hộp công cụ (mỗi hộp
gồm hệ thống các hàm có những chức năng đặc biệt của MATLAB) nhằm
giải quyết các lớp vấn đề cụ thể trong các lĩnh vực ứng dụng khác nhau.
MATLAB cung cấp nhiều đặc tính tiện lợi đối với việc xử lý và chia
sẻ công việc. Trong quá trình làm việc với MATLAB, các đoạn mã của nó
có thể được tích hợp với các ngôn ngữ và ứng dụng khác.

Hình 4.3 Giao diện MATLAB
Hệ thống phân loại theo kích thước và khối lượng



TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58



Các đặc điểm cơ bản của MATLAB

-

Là ngôn ngữ bậc cao dùng cho các tính toán kỹ thuật.

MÁY CHÍNH XÁC

-

Là môi trường phát triển để quản lý dữ liệu.

-

Gồm nhiều công cụ tương tác cho việc khai thác và xử lý dữ liệu,
thiết kế và giải quyết vấn đề.

-

Các hàm đồ thị đối với ảnh 2 hoặc 3 chiều cho phép hình ảnh hóa dữ
liệu.

-


Chứa các công cụ để xây dựng các giao diện đồ thị của người sử
dụng.

-

Gồm nhiều hàm chức năng dựa trên các giải thuật cơ sở nhằm tích
hợp MATAB với các ứng dụng và ngôn ngữ lập trình khác như:
C,C++, Fortran, Java, Microsoft Excel…



Phát triển giải thuật và ứng dụng
MATLAB là một ngôn ngữ bậc cao được tích hợp các công cụ phát

triển giúp người sử dụng phát triển và phân tích các giải thuật và ứng dụng
một cách nhanh chóng.
Ngôn ngữ lập trình MATLAB
Ngôn ngữ lập trình MATLAB hỗ trợ các phép toán đối với ma trận và
vec-tơ cơ sở cho các vấn đề kỹ thuật và khoa học.
Việc lập trình và phát triển giải thuật trong MATLAB có tốc độ nhanh
hơn so với các ngôn ngữ lập trình truyền thống do MATLAB bỏ qua các
công việc điều khiển bậc thấp như khai báo biến, khai báo mẫu dữ liệu và
xác định vùng nhớ. Trong nhiều trường hợp, MATLAB còn bỏ qua cả sự
cần thiếp của các vòng lặp ‘for’. Kết quả là, một dòng lệnh được viết trong
MATLAB có thể tương đương với nhiều dòng lệnh trong C hay C++.
Hệ thống phân loại theo kích thước và khối lượng


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

K58

MÁY CHÍNH XÁC

Phân tích và tiếp cận dữ liệu
Trong quá trình phân tích dữ liệu, MATLAB hỗ trợ hầu hết các công
đoạn như: thu nhận dữ liệu từ thiết bị ngoại vi, các phân tích số học, tiền xử
lý, hình ảnh hóa…
Chương trình MATLAB cung cấp các công cụ tương tác cũng như các
hàm điều khiển theo dòng cho việc tính toán trong phân tích dữ liệu bao
gồm:
-

Các phép nội suy.

-

Trích chọn tính chất.

-

Chọn ngưỡng và lọc nhiễu.

-

Tương quan, phân tích Fourier và lọc.

-

Phát hiện các điểm đỉnh, đáy và điểm không.


-

Thống kê cơ bản và chuẩn hóa các đường cong.

-

Phân tích ma trận.
Việc tiếp cận dữ liệu từ các thư mục, ứng dụng, cơ sở dữ liệu và thiết

bị ngoại vi bởi MATLAB là hết sức dễ dàng. MATLAB hỗ trợ nhiều loại
định dạng file: ASCII, nhị phân, các file hình ảnh và âm thanh hay thậm
chí các file định dạng HDF.
Trong MATLAB có nhiều hộp công cụ (toolbox) hỗ trợ cho việc tiếp
cận dữ liệu như: hộp công cụ cơ sở dữ liệu (Database Toolbox), hộp công
cụ thu nhận dữ liệu (Data Acquisition Toolbox) hay hộp công cụ điều khiển
thiết bị (Instrument Control Toolbox).
Hình ảnh hóa dữ liệu
Tất cả các đặc tính về hình ảnh cần thiết cho hình ảnh hóa các dữ liệu
khoa học kỹ thuật đều được tích hợp trong MATLAB. Những đặc tính này
Hệ thống phân loại theo kích thước và khối lượng


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

bao gồm: các hàm vẽ ảnh 2 và 3 chiều, các hàm vẽ thể tích 3 chiều, các
công cụ tương tác tạo ảnh, khả năng xuất kết quả dưới các dạng file ảnh

thông thường.
Xuất kết quả và triển khai ứng dụng
MATLAB đưa ra nhiều đặc tính giúp báo cáo và chia sẻ công việc.
Các đoạn code viết trên MATLAB có thể được tích hợp với các ngôn ngữ
và ứng dụng khác. Đồng thời cũng có thể triển khai các thuật toán cũng
như ứng dụng của nó như một chương trình hoặc các khối phần mềm riêng
biệt.
Sau khi hoàn thành công việc, người sử dụng cần xuất kết quả ra
thường là dưới dạng hình ảnh hoặc báo cáo. MATLAB có hỗ trợ file hình
ảnh với nhiều định dạng khác do đó việc xuất kết quả dưới dạng đồ thị hay
file ảnh là hết sức dễ dàng. Ngoài ra, nếu muốn thì cũng có thể chuyển code
từ MATLAB ra các dạng khác: HTML, Word, Latex…
Kết hợp mã MATLAB với các loại ngôn ngữ và ứng dụng khác
MATLAB cung cấp sẵn các hàm cho việc kết hợp mã của các ngôn
ngữ lập trình khác như C, C++, Fortran hay Java với mã chương trình của
nó. Sử dụng thư viện công cụ(engine library) của MATLAB, người sử dụng
có thể gọi các đoạn mã từ C, C++ hay Fortran.
Các sản phẩm sau khi xử lý bằng MATLAB thường là các đoạn mã.
Các đoạn mã này có thể được cung cấp cho những người khác hoặc ứng
dụng vào các sản phẩm phần cứng hoặc phần mềm cụ thể như arduino,
PLC.

Hệ thống phân loại theo kích thước và khối lượng


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

4.2.2


MÁY CHÍNH XÁC

Giới thiệu về GUI

GUI được viết tắt của từ “Graphical User Interface” dịch theo tiếng việt
nôm la là Giao diện người dùng đồ họa. Là ta sẽ tiến hành sử dụng chuột để
thao tác các thanh công cụ đã được con người lập trình sẵn và tích hợp vào
phần mền Matlab. Nó cho phép bạn tương tác giao diện chương trình từ đó
bạn nhìn được một cách khách quan nhất và bắt đầu viết code để tương tác
giao diện.
Nếu như bạn học lập trình C# với Windows Form thì lập trình GUI cũng
giống vậy. Cũng thao tác kéo thả button, textbox, layout,… giúp bạn nhanh
chóng tạo ra giao diện, giảm thời gian ngồi Code.
Cách tạo GUI trong MATLAB
- Tại cửa sổ Command window, tiến hành gõ lệnh ‘guide’ và ấn Enter. Cửa
sổ GUIDE quick start sẽ xuất hiện.
- Tại tab Create New GUI thì cho phép bạn 4 sự lựa chọn sau:


Blank GUI (Default): Là bạn lập trình giao diện trống, chưa có thứ gì
cả.



GUI with Uicontrols, GUI with Axes and Menu, Modal Question
Dialog: Là các templates đã có giao diện sẵn ở mức cơ bản. Ta đang bắt
đầu học thì sẽ chọn Blank GUI (Default) sau này bạn có kiến thức rồi
thì hãy sử dụng các templates khác.

- Tab Open Existing GUI là nơi bạn có thể mở các GUI và bạn đã làm và

lưu trước đó, file này có đuôi là .fig.

Hệ thống phân loại theo kích thước và khối lượng


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

Hình 4.5 Giao diện GUI
Tại giao diện GUI có các tool Push Button, Static Text, Axes,… giúp
ta trong việc lập giao diện và tương tác với code MATLAB.
4.2.3

Xử lý ảnh bằng MATLAB

4.2.3.1 Ảnh trong MATLAB
Trong MATLAB, dữ liệu chủ yếu được lưu trữ theo cấu trúc mảng
(tập có thứ tự gồm các phần tử số thực hoặc phức). Ảnh trong Matlab cũng
được lưu trữ bởi các mảng phần tử với các giá trị lưu trữ có thể là mầu,
cường độ… của ảnh.
Hầu hết các ảnh được MATLAB lưu trữ dưới dạng các mảng 2 chiều
(ví dụ: ma trận). Trong các mảng 2 chiều này, mỗi phần tử tương ứng với
một pixel và thường được biểu diễn bởi một điểm trên màn hình máy
tính(ví dụ: Một bức ảnh có 500 hàng và 700 cột gồm nhiều điểm mầu khác
nhau được lưu trữ bởi một ma trận có kích thước 500x700). Một số bức
ảnh, như ảnh mầu đòi hỏi phải được lưu trữ bởi mảng ba chiều. Trong đó,

Hệ thống phân loại theo kích thước và khối lượng



TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

mặt phẳng thứ nhất trong mảng ba chiều này biểu diễn cho cường độ đỏ
(red) của phần tử, mặt phẳng thứ hai biểu diễn cho cường độ màu xanh là
cây (green) và mặt phẳng còn lại biểu diễn cho cường độ màu xanh da trời
(blue) của phần tử. Với việc lưu trữ các ảnh dưới dạng mảng, việc xử lý
ảnh với dữ liệu được lưu bởi dạng ma trận nào đều được thực hiện rất thuận
tiện.
4.2.3.2 Hộp công cụ xử lý ảnh (image processing toolbox)
Matlab có thể xử lý cũng như lưu trữ các bức ảnh dưới nhiều định
dạng khác nhau: BMP, HDF, JPEG, TIFF… Dù vậy tất cả các định dạng
này đều được quy chuẩn về 4 dạng cơ bản: nhị phân (Binary), được gán chỉ
số (Indexed), mức xám (Grayscale), RGB (RGB hay truecolor). Các định
dạng ảnh này sẽ qui định cách mà Matlab biên dịch các phần tử của ma trận
dữ liệu (VD: các giá trị cường độ phần tử).
* Ảnh dạng mức xám (gray scale image):
Ảnh loại này được biểu diễn bởi một ma trận mà mọi phần tử của
nó đều biểu diễn một giá trị sáng/tối của điểm ảnh ở vị trí tương ứng. Có 2
cách để biểu diễn giá trị thể hiện mức độ ‘xám’ của một pixel: dạng double
và dạng uint8. Dạng double gán cho mỗi pixel một giá trị động thuộc
khoảng (0,1): giá trị 0 ứng với màu đen còn 1 ứng với màu trắng. Dạng
uint8 gán cho mỗi pixel một giá trị từ 0 đến 255 thể hiện độ sáng
(brightness): giá trị 0 tương ứng với màu đen còn 255 ứng với màu trắng.
* Ảnh kiểu nhị phân:
Mỗi bức ảnh dạng này được lưu trữ bởi một ma trận trong đó mỗi

phần tử của ma trận chỉ có thể có giá trị hoặc 0 (đen) hoặc 1 (trắng).
* Ảnh được gán chỉ số:
Hệ thống phân loại theo kích thước và khối lượng


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

Đây là một cách thông dụng để biểu diễn các bức ảnh mầu. Một
bức ảnh được gán chỉ số được lưu trữ bởi 2 ma trận. Ma trận thứ nhất có
cùng kích cỡ với bức ảnh và chứa giá trị thứ nhất của mỗi pixel. Ma trận
còn lại được gọi là ma trận màu (color map) và có kích cỡ có thể khác so
với kích cỡ của bức ảnh. Các chỉ số ở ma trận thức nhất cho ta biết số nào
sẽ được biểu diễn bởi ma trận màu.
* Ảnh dạng RGB:
Các ảnh RGB được Matlab lưu trữ bởi 3 ma trận chứa các kích cỡ
ứng với định dạng của bức ảnh. Mỗi ma trận tương ứng với một trong các
mầu: đỏ (Red), xanh lá cây (Green), xanh da trời (Blue). Đồng thời giá trị
mỗi phần tử của ma trận sẽ thể hiện cường độ từng loại mầu tại mỗi pixel.
Các màu trong ảnh RGB được thể hiện trong đồ thị histogram của các
kênh màu. Biểu đồ histogram thể hiện cường độ sáng của màu, số pixel
chứa màu trong ảnh.

Hình 4.5 Biểu đồ histogram của các kênh màu trong một ảnh.
4.2.3.3

Các hàm xử lý ảnh cơ bản trong Matlab


Đọc một ảnh đồ hoạ

Hệ thống phân loại theo kích thước và khối lượng


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

Hàm imread đọc một ảnh từ bất kì định dạng nào được trợ giúp trong
bất kì chiều sâu bit nào được trợ giúp. Hầu hết các file ảnh sử dụng 8 bit để
chứa giá trị của pixel. Khi chúng được đọc vào bộ nhớ, Matlab chứa chúng
dưới dạng uint8. Với các file trợ giúp 16 bít dữ liệu, PNG và TIFF, Matlab
chứa chúng dưới dạng uint16. Chú ý: Với ảnh chỉ số, imread luôn luôn
đọc bản đồ màu vào trong một chuỗi thuộc lớp double, thậm chí mảng ảnh
tự nó thuộc lớp uint8 hay uint16.
Chẳng hạn, đoạn mã sau sẽ đọc một ảnh RGB vào không gian làm việc
của Matlab lưu trong biến RGB.
RGB=imread(‘football.jpg’);
Ta có thể đọc trực tiếp file ảnh từ máy tính, bằng cách sử dụng hàm
lệnh imread và đường dẫn đến file ảnh ta chọn.
Ví dụ: A=imread(‘D:/matlabanh/1.jpg’);
Ghi một ảnh đồ hoạ
- Hàm imwrite sẽ ghi một ảnh tới một file đồ hoạ dưới một trong các
định dạng được trợ giúp. 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ó.
Chỉ ra định dạng phụ - Tham số đặc biệt
- Khi sử dụng imwrite với một số định dạng đồ hoạ, ta có thể chỉ ra các

tham số phụ. Chẳng hạn, với định dạng PNG ta có thể chỉ ra độ sâu bit như
một tham số phụ.
- Để biết thêm các cấu trúc khác của hàm xem phần trợ giúp trực tuyến
của Matlab.
Đọc và ghi ảnh nhị phân theo định dạng 1 bit
Hệ thống phân loại theo kích thước và khối lượng


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

- Trong một số định dạng file, một ảnh nhị phân có thể được lưu trong
một định dạng 1 bit. Nếu định dạng file trợ giúp nó, Matlab ghi ảnh nhị
phân như ảnh 1 bit theo mặc định. Khi ta đọc một ảnh nhị phân với định
dạng 1 bit, Matlab đại diện nó trong không gian làm việc như một mảng
lôgic.
Chú ý: Khi ghi file nhị phân, Matlab thiết lập trường ColorType thành
‘grayscale’.
Truy vấn một file đồ hoạ:
Hàm imfinfo cho phép ta có thể nhận được thông tin về một file ảnh
được trợ giúp bởi toolbox. Cú pháp: imfinfo (filename,fmt). Các thông tin
được cung cấp bởi hàm imfinfo là: filename, filemodedate, filesize,
format, formatversion, width, height, bitdepth, colortype … Thông tin mà
ta nhận được phụ thuộc vào kiểu của file nhưng nó luôn bao gồm những
thông tin sau:
-

Tên của file ảnh.


-

Định dạng file ảnh.

-

Số version của định dạng file.

-

Ngày sửa đổi file gần nhất.

-

Kích thước file tính theo byte.

-

Chiều rộng ảnh tính theo pixel.

-

Chiều cao ảnh tính theo pixel.

-

Số lượng bít trên một pixel.

-


Kiểu ảnh: RGB, chỉ số …
Hiển thị ảnh

Hệ thống phân loại theo kích thước và khối lượng


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

- Để hiển thị một ảnh, ta có thể sử dụng imview để hiển thị một ảnh mà
đã được nhập vào trong không gian làm việc của Matlab.
moonfig = imread('moon.tif');
imview(moonfig);
Ta cũng có thể chỉ định tên của file ảnh như trong ví dụ sau:
imview('moon.tif');
- File ảnh phải có mặt trong thư mục hiện tại hoặc trong đường dẫn của
Matlab. Cấu trúc này có thể hữu ích cho việc quét qua nhiều ảnh. Tuy
nhiên, lưu ý, khi sử dụng cấu trúc này, dữ liệu ảnh không được lưu trong
không gian làm việc của Matlab.
- Nếu ta gọi hàm imview mà không chỉ ra mất kì tham số nào, nó sẽ
hiển thị một hộp chọn file cho phép ta chỉ ra tên file muốn hiển thị.
- Ta có thể sử dụng hàm imshow thay cho imview để hiển thị ảnh. Ta
sử dụng imshow để hiển thị một ảnh đã được nhập vào trong không gian
làm việc như ví dụ sau:
moon=imread('moon.tif');
imshow(moon);
- Ta cũng có thể chỉ ra tên của file ảnh như một tham số truyền vào cho

hàm như ví dụ sau: imshow('moon.tif');
Khi sử dụng cấu trúc này thì dữ liệu ảnh không được nhập vào trong
không gian làm việc. Tuy nhiên, ta có thể mang ảnh vào trong không gian
làm việc bằng cách sử dụng hàm getimage. Hàm này sẽ nhận dữ liệu ảnh
từ handle của một đối tượng ảnh hiện tại. Chẳng hạn: moon = getimage; Sẽ
gán dữ liệu ảnh từ moon.tif vào biến moon.
Các hàm chuyển đổi kiểu ảnh
- Với các thao tác nhất định sẽ thật hữu ích khi có thể chuyển đổi ảnh từ
dạng này sang dạng khác. Chẳng hạn, nếu ta muốn lọc một màu ảnh được
Hệ thống phân loại theo kích thước và khối lượng


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

lưu trữ dưới dạng ảnh chỉ số đầu tiên ta nên chuyển đổi nó thành dạng ảnh
RGB. Khi ta áp dụng phép lọc tới ảnh RGB, Matlab sẽ lọc giá trị cường độ
trong ảnh tương ứng. Nếu ta cố gắng lọc ảnh chỉ số, Matlab đơn giản chỉ
áp đặt phép lọc tới ma trận ảnh chỉ số và kết quả sẽ không có ý nghĩa. Chú
ý: Khi chuyển đổi một ảnh từ dạng này sang dạng khác, ảnh kết quả có thể
khác ảnh ban đầu. Chẳng hạn, nếu ta chuyển đổi một ảnh màu chỉ số sang
một ảnh cường độ, kết quả ta sẽ thu được một ảnh đen trắng.
- Danh sách sau đây sẽ liệt kê các hàm được sử dụng trong việc 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.
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.
- Ta cũng có thể thực hiện các phép chuyển đổi kiểu chỉ sử dụng cú
pháp của Matlab. Chẳng hạn, ta có thể chuyển đổi một ảnh cường độ sang
ảnh RGB bằng cách ghép nối 3 phần copy của ma trận ảnh gốc giữa 3
chiều:
RGB=cat(3,I,I,I );

Hệ thống phân loại theo kích thước và khối lượng


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

- Ảnh RGB thu được có các ma trận đồng nhất cho các mặt phẳng R, G,
B vì vậy ảnh hiển thị giống như bóng xám. Thêm vào những công cụ
chuyển đổi chuẩn đã nói ở trên, cũng có một số hàm mà trả lại kiểu ảnh
khác như một phần trong thao tác mà chúng thực hiện.
Thay đổi kích thước ảnh
-


Để thay đổi kích thước của một ảnh, sử dụng hàm imresize. Sử dụng
hàm này ta có thể:
+ Chỉ ra kích thước của ảnh kết quả.
+ Chỉ ra phương pháp nội suy được sử dụng.
+ Chỉ ra bộ lọc được sử dụng để ngăn ngừa hiện tượng răng cưa.
Chỉ ra kích thước cho ảnh kết quả

-

Sử dụng hàm imresize, ta chó thể chỉ ra kích thước của ảnh kết quả
theo hai cách:
+ Bằng cách chỉ ra hệ số phóng đại được sử dụng trên ảnh.
+ Bằng cách chỉ ra chiều của ảnh kết quả.
Sử dụng hệ số phóng đại ảnh

-

Để mở rộng một ảnh, chỉ ra hệ số phóng đại lớn hơn 1. Để thu nhỏ
một ảnh, chỉ ra hệ số phóng đại nằm giữa 0 và 1. Chẳng hạn, lệnh sau
tăng kích thước của ảnh I lên 1.25 lần:

Hệ thống phân loại theo kích thước và khối lượng


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

Hình 4.6 Ảnh trước và sau khi imresize

I = imread(‘D:/matlabanh/2.jpg’);
J = imresize(I,1.25);
imshow(I);
figure, imshow(J)
Ta có thể chỉ ra kích thước của ảnh ra bằng cách truyền một véc tơ
chứa số lượng hàng và cột của ảnh sau cùng. Những lệnh sau đây tạo một
ảnh ra Y với 100 hàng và 150 cột.
Y = imresize(X,[100 150])
Chú ý: Nếu kích thước được chỉ ra không có cùng tỉ lệ với ảnh vào, ảnh
ra sẽ bị biến dạng.
Quay ảnh
- Để quay một ảnh, sử dụng hàm imrotate. Hàm này chấp nhận hai tham
số chính:
+ Ảnh cần quay.
+ Góc quay.

Hệ thống phân loại theo kích thước và khối lượng


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

Góc quay tính theo độ. Nếu ta chỉ ra một giá trị dương, hàm imrotate
quay ảnh theo chiều ngược chiều kim đồng hồ. Nếu chỉ ra giá trị âm, hàm
quay ảnh theo chiều kim đồng hồ. Ví dụ sau quay một ảnh 35 độ theo chiều
ngược chiều kim đồng hồ:
J=imrotate(I,35 ) ;
Ví dụ sau quay một ảnh 35 độ ngược chiều kim đồng hồ:

I = imread(‘1.jpg');
J = imrotate(I,35);
imshow(I)

Hình 4.7 Ảnh trước và sau khi imrotate
Xén ảnh (image cropping)
- Để trích một vùng chữ nhật của một ảnh, sử dụng hàm imcrop. Hàm
imcrop chấp nhận hai tham số chính:
+ Ảnh cần xén.

Hệ thống phân loại theo kích thước và khối lượng


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

+ Các góc của hình chữ nhật xác định vùng xén.
-

Nếu ta gọi hàm imcrop mà không chỉ ra hình chữ nhật, ta có thể xén

ảnh theo các tương tác. Trong trường hợp này, ta sử dụng trỏ chuột để chọn
vùng chữ nhật cần xén bằng cách nhấn và giữ phím chuột trái và di chuyển
để chọn vùng xén. Khi chọn xong thì nhả chuột. Trong ví dụ sau, ta hiển thị
một ảnh và gọi hàm imcrop. Hàm imcrop hiển thị ảnh trong một hình và
đợi ta vẽ vùng chữ nhật cần xén trên ảnh.
Dán nhãn cho đối tượng trong ảnh
Ảnh được dãn nhán là ảnh nhị phân. Các nhãn dán sẽ được gắn vào

các thành phần trong ảnh nhị phân. Câu lệnh bwlabel trả về một ma trận L,
có cùng kích thước với ảnh, chứa các nhãn cho các đối tượng được kết nối
trong ảnh. Các đối tượng được dán nhãn có thể được chọn trong câu lệnh.
Nếu bỏ qua số đối tượng dán nhãn, đối số mặc định sẽ là 8. Các phần tử
của L là các giá trị số nguyên lớn hơn hoặc bằng 0. Các pixel có nhãn 0 là
nền. Các pixel có nhãn 1 tạo thành một đối tượng; các pixel có nhãn 2 tạo
thành một đối tượng thứ hai;…
Ví dụ: bw=bwlabel(I,2); %dán nhãn cho 2 đối tượng trong ảnh I.
Các đối tượng được dán nhãn sẽ được tính chọn các đặc tính của đối
tượng bằng câu lệnh regionprops. Các đối tượng sẽ được tùy chọn các đặc
tính để show lên ảnh hoặc để xử lý các bước tiếp theo. Các đặc tính trong
câu lệnh này gồm có: Chu vi, đường tâm, sự định hướng, đường bao, chỉ số
Euler,…
Ví dụ ta chọn đặc tính Chu vi và Đường tâm cho một ảnh I:
stats=regionprops(bw,’Area’,’Centroid’);

Hệ thống phân loại theo kích thước và khối lượng


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

Nếu các thuộc tính là ‘all’, regionprops sẽ tính toán tất cả các phép
đo hình dạng, kích thước được liệt kê ở trên. Các giá trị đo đạc được đều
tính theo than pixel. Nếu các thuộc tính là ‘basic’, thì regionprops chỉ tính
toán các phép đo cơ bản ‘Area’, ‘Centroid’ và ‘BoundingBox’.
Ví dụ: stats=regionprops(bw,’all’);%chọn tất cả các thuộc tính của ảnh.
4.2.3.4 Hộp công cụ thu nhận ảnh (image acquisition toolbox)

Hộp công cụ thu nhân ảnh được dùng để thực hiện chức năng thu
nhận ảnh qua các thiết bị được kết nối với máy tính. Sử dụng các hàm chức
năng của hộp công cụ này có thể tạo ra một đối tượng thể hiện sự kết nối
giữa Matlab và các thiết bị thu hình ảnh cụ thể. Sử dụng các tính chất của
đối tượng giúp kiểm soát nhiều bước trong quá trình thu nhận ảnh như
dung lượng dữ liệu video muốn ghi lại.
Hộp công cụ sử dụng các thành phần được gọi là các bộ thích ứng
dùng để liên kết với các thiết bị thông qua các trình điều khiển.
Với hộp công cụ thu nhận hình ảnh, ta có thể nối trực tiếp phần cứng
ở trong thanh công cụ và có thể thiết lập các tham số thu nhận đồng thời
xem và yêu cầu dữ liệu ảnh. Ngoài ra, ta có thể tiếp cận dữ liệu của Matlab
dưới một vài định dạng đồng thời tạo ra một file AVI.
Matlab thông qua hộp công cụ thu nhận hình ảnh (Support Packages
Installer) hỗ trợ kết nối với nhiều loại thiết bị thu nhận ảnh bao gồm: các
thiết bị camera kỹ thuật số chuyên biệt dựa trên kết nối 1394 (DCAM), các
thiết bị hỗ trợ kết nối USB (WEB camera, máy quay kỹ thuật số, cạc
chuyển đổi TV…). Tùy vào loại camera mà ta sử dụng để tìm kiếm và cài
đặt loại phần mềm hỗ trợ thiết bị phù hợp cho MATLAB.

Hệ thống phân loại theo kích thước và khối lượng


TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
K58

MÁY CHÍNH XÁC

Hình 4.8 Thư mục Support Packages Installer

XÂY DỰNG CHƯƠNG TRÌNH XỬ LÝ ẢNH VỚI MATLAB


4.3

4.3.1 Bài toán xử lý ảnh
Phát biểu bài toán: Sử dụng quả cam để phân loại. Cam sẽ đi qua
camera sau đó được xử lý bằng MATLAB để phân loại theo màu sắc và
kích thước. Yêu cầu cam sau khi được xử lý sẽ nhận dạng được các loại
sau:
-

Quả to, chín
Quả to, xanh
Quả nhỏ, chín
Quả nhỏ, xanh

Cách giải quyết bài toán: Em sử dụng các hàm thuật toán trong
MATLAB để xử lý tách chọn quả sau đó phân loại theo diện tích quả và
màu sắc của quả đó.

Hệ thống phân loại theo kích thước và khối lượng


×