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
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.
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
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ả)
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
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.
-
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 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
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
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
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.
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
đặ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
-
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ồ:
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)
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