Tải bản đầy đủ (.pdf) (51 trang)

Tìm hiểu lập trình trong matlab tìm hiểu và hướng dẫn sử dụng image processing

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 (2.02 MB, 51 trang )

TRƯỜNG ĐẠI HỌC HỊA BÌNH
KHOA CƠNG NGHỆ

KHĨA LUẬN TỐT NGHIỆP
Đề tài: “Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn
sử dụng Image Processing”

Sinh viên: Nguyễn Trường Giang
Ngành: Công nghệ thông tin
GVHD: T.S Nguyễn Đăng Minh

Hà nội, tháng 4 năm 2014


Lời cảm ơn
Trên thực tế khơng có thành cơng nào mà không gắn liền với những sự hỗ trợ,
giúp đỡ dù ít hay nhiều, dù trực tiếp hay dán tiếp của người khác. Trong thời gian học
tập tại mái trường Đại Học Hịa Bình em đã nhận được sự giúp đỡ của thầy cô, bố mẹ
và bạn bè.
Thời gian làm đồ án tốt nghiệp là dịp tốt nhất để chúng em tiếp xúc với thực tế.
Trong thời gian bảo vệ này, chúng em đã học hỏi và tìm hiểu được hiện trạng và yêu
cầu của thực tế. Mục đích của việc làm đồ án trải nghiệm thực tế là giúp cho sinh viên
hiểu rõ vai trò, trách nhiệm của người cán bộ kỹ thuật, nhằm xây dựng cho mình có
được sự nhận thức đúng đắn và hiểu rõ hơn được mối quan hệ giữa lý thuyết và thực tế
và sự vận dụng của lý thuyết vào thực tế, qua đó củng cố và hệ thống lại kiến thức đã
học. Qua đợt bảo vệ đồ án này được sự hướng dẫn, chỉ bảo tận tình của thầy giáo và
các anh chị tại công ty em đã trải nghiệm thực tế, các bạn trong lớp, chúng em đã nắm
vững được nhiều kiến thức và đã hoàn thành tốt đề tài đồ án tốt nghiệp của mình.
Với lịng biết ơn sâu sắc em xin chân thành cảm ơn đến quý thầy cô trong khoa
Cơng nghệ, trường Đại học Hịa Bình đã truyền đạt vốn kiến thức quý báu cho em. Và
đặc biệt là thầy Nguyễn Đăng Minh trong học kỳ cuối này, khoa đã tạo điều kiện cho


em làm luận văn tốt nghiệp với đề tài “Tìm hiểu lập trình trong matlab.Tìm hiểu và
hướng dẫn sử dụng Image processing”.


Mục Lục
Lời mở đầu ...................................................................................................................... 1
Chương I.......................................................................................................................... 2
Nhu cầu khôi phục ảnh và một số kỹ thuật kèm theo ..................................................... 2
1.1Giới thiêu về khôi phục ảnh .................................................................................... 2
1.1.1 Giới thiệu ......................................................................................................... 2
1.1.2 Phục chế ảnh .................................................................................................... 2
1.2 Mơ hình suy thoái ảnh ........................................................................................... 3
Chương II.Giới thiệu chung về phần mềm Matlab ......................................................... 4
1.1 Khái niệm về Matlab ............................................................................................. 4
1.2 Tổng quan về cấu trúc dữ liệu của Matlab, các ứng dụng ..................................... 4
1.2.1 Dữ liệu ............................................................................................................. 4
1.2.2 Ứng dụng ......................................................................................................... 4
1.2.3 Toolbox là một công cụ quan trọng trong Matlab .......................................... 5
1.3 Hệ thống Matlab .................................................................................................... 5
1.4 Làm quen với Matlab ............................................................................................ 5
1.5 Các cửa sổ làm việc của Matlab ............................................................................ 6
1.6 Giới thiệu khái quát về ảnh số ............................................................................... 9
1.6.1 Các khái niệm cơ bản về ảnh ........................................................................... 9
2. Các cách phân loại ảnh .......................................................................................... 10
3. Xử lý ảnh với Matlab ............................................................................................. 10
3.1 Xử lý ảnh .......................................................................................................... 10
3.2 Các giai đoạn xử lý ảnh .................................................................................... 11
Chương III.

Các hàm xử lý ảnh trong matlab ........................................................... 13


1.Các kiểu ảnh trong Matlab ...................................................................................... 13
1.1Ảnh được định chỉ số (Indexed Images) ........................................................... 13
1.2 Ảnh cường độ (Intensity Images) .................................................................... 13
1.3 Ảnh nhị phân (Binary Images) ........................................................................ 13
1.4 Ảnh RGB (RGB Images) ................................................................................ 13
2. Các hàm xử lý ảnh cơ bản trong Matlab ................................................................ 14
2.1 Đọc và ghi dữ liệu ảnh .................................................................................... 14
2.2 Hiển thị ảnh ...................................................................................................... 16
2.3 Các hàm chuyển đổi kiểu ảnh.......................................................................... 17
2.4 Chuyển đổi định dạng các file ảnh ................................................................... 18
2.5 Số học ảnh ........................................................................................................ 18
3. Biến đổi không gian ảnh ........................................................................................ 19


3.1 Bảng thuật ngữ ................................................................................................. 19
3.2 Nội suy ............................................................................................................. 20
3.3 Thay đổi kích thước ảnh ................................................................................... 21
3.5 Xén ảnh (image cropping) ................................................................................ 25
3.6 Các biến đổi ảnh thông dụng ............................................................................ 27
Chương IV.Thử nghiệm với lập trình GUI ................................................................... 32
1.1

Giao diện chính của chương trình .................................................................. 32

1.2

M-file của chương trình .................................................................................. 32

1.2


Một số hình ảnh của test chương trình với hình ảnh bị nhiễu muối tiêu........ 39

1.3

hình ảnh test của chương trình với hình ảnh bị nhiễu Gaussian .................... 42

Kết Luận ........................................................................................................................ 45
Tài Liệu Tham Khảo ..................................................................................................... 46


Mục Lục Hình Ảnh
Hình 2.1: Cửa sổ làm việc của matlab
Hình 2.2 Cửa sổ Command History
Hình 2.3 Cửa sổ Workspace
Hình 2.4 Cửa sổ Variable Editor
Hình 2.5 Các bước cơ bản trong xử lý ảnh
Hình 3.1 Ảnh trước và sau khi imresize
Hình 3.2 Ảnh trước và sau khi imrotate
Hình 3.6 Ảnh trước và sau khi imtransforms
Hình 3.7 Ảnh trước và sau khi imtransforms với 1 cường độ ảnh
Hình 4.1 Giao diện chính của chương trình
Hình 4.2 Ảnh bị nhiễu muối tiêu( salt&papper)
Hình 4.3 Ảnh lọc với bộ lọc trung bình 3x3
Hình 4.4 Hình ảnh với bộ lọc trung bình 5x5
Hình 4.5 Hình ảnh với bộ lọc cao cấp 3x3
Hình 4.6 Hình ảnh với bộ lọc cao cấp 5x5
Hình 4.7 Hình ảnh bị nhiễu Gaussian
Hình 4.8 Hình ảnh với bộ lọc điểm giữa ma trận 3x3
Hình 4.9 Hình ảnh với bộ lọc điểm giữa ma trận 5x5

Hình 4.10 Hình ảnh với bộ lọc tương thích với mắt là 3x3
Hình 4.11 Hình ảnh với bộ lọc tương thích với mắt là 5x5

6
7
8
8
11
22
24
29
31
32
39
40
40
41
41
41
42
42
43
44


Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing.

Lời mở đầu
Ngày nay khi khoa học và công nghệ ngày một phát triển, đặc biệt là lĩnh vực
công nghệ số,công nghệ điện tử. Trong lĩnh vực điện tử yêu cầu về tốc độ xử lý, cũng

như kích thước của những linh kiện,sản phẩm ngày càng cao. Tốc độ xử lý của chip
được cải thiện rất nhanh vì vậy chúng có khả năng xử lý tốt trong các lĩnh vực cơng
nghệ âm thanh và hình ảnh. Một trong những lĩnh vực được ứng dụng rất nhiều trong
cơng nghiệp,trong y tế,trong quốc phịng là xử lý, phân tích hình ảnh và video. Hiện
nay có rất nhiều cơng cụ hỗ trợ việc khơi phục hình ảnh để đem lại chất lượng ảnh tốt
hơn như Photoshop,Magic Photo Recovery, Matlab,… . Vì những ứng dụng rộng rãi
của của lĩnh vực này nên em đã quyết định chọn đề tài " Tìm hiểu lập trình trong
MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing".Lý do em chọn đề tài này
vì mặc dùng các cơng cụ trên cũng có thể đem lại chất lượng ảnh tốt những trong
Matlab chúng ta có thể sử dụng thay đổi code theo cách của mình .
Và các thầy cơ trong bộ mơn đã tận tình giúp đỡ và tạo mọi điều kiện thuận lợi
nhất về phương tiên,dụng cụ cũng như về mặt kiến thức cho chúng em trong suốt quá
trình thực hiện đề tài. Em thực hiện đã hoàn thành được những yêu cầu mà đề tài đồ
án đặt ra đó là tìm hiểu về hoạt động của Matlab và cài đặt một số những thuật toán xử
lý ảnh sử dụng. Mặc dù em đã cố gắng và nỗ lực hết mình để hồn thành đồ án tốt
nghiệp này, song chắc chắn không thể tránh khỏi những sai sót và hạn chế. Vì vậy, em
rất mong sẽ nhận được sự đóng góp ý kiến của thầy cô giáo và các bạn để đề tài tốt
nghiệp này được hoàn thiện hơn. Xin chân thành cảm ơn!

Sinh Viên: Nguyễn Trường Giang

Page 1


Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing.

Chương I.
Nhu cầu khôi phục ảnh và một số kỹ thuật kèm theo
1.1Giới thiêu về khôi phục ảnh
1.1.1 Giới thiệu

Khơi phục ảnh là q trình loại bỏ hay tối thiểu hóa các ảnh hưởng của mơi
trường bên ngoài hoặc do các hệ thống thu nhận ảnh gây ra. Về nguyên tắc, khôi phục
ảnh nhằm xác định ,mơ hình tốn học của q trình gây ra biến dạng, tiếp theo là dùng
ánh xạ ngược để xác định lại ảnh
Bất kỳ một ảnh nào được thu bằng các thiết bị điện, quang điện hay quang học
thường bị nhiễu bởi mơi trường cảm biến của thiết bị đó. Các loại nhiễu có thể là do
hệ thống , bị mờ do lệch tiêu điểm camera, nhiễu ngẫu nhiên do chuyển động giữa
camera và đối tượng được chụp, nhiễu do khí quyển…
Khôi phục ảnh là dùng các bộ lọc để lọc các ảnh bị nhiễu nhằm giảm tối thiểu
sự ảnh hưởng của các loại nhiễu này để cho ra ảnh kết quả càng gần giống ảnh gốc
càng tốt. Hiệu quả của các bộ lọc khôi phục ảnh phụ thuộc vào sự nhận biết về quá
trình nhiễu cùng với quá trình thu nhận hình ảnh. Khơi phục ảnh thường được xử lý
trên miền tần số là chủ yếu. Bao gồm các kỹ thuật lọc ngược,lọc bình phương tối
thiểu.Mục đích chính của xử lý ảnh là làm thỏa mãn nhu cầu truyền thông tin ngày
càng cao hơn của con người, nhất là nhu cầu giải trí, nghiên cứu và trao đổi sau khi
biến đổi ảnh thành các mảng dữ liệu và xử lý nó. Để thu được kết quả của sự phân tích
và xử lý hay đã được truyền dẫn. Trong quá trình xử lý và truyền dẫn mảng dữ liệu
những tác động xấu từ môi trường xung quanh làm hư hại ảnh. Vì vậy, để khơi phục
lại ảnh có chất lượng tốt, nhất thiết phải loại bỏ các tín hiệu khơng mong muốn đó. Do
đó , mục tiêu chủ yếu của việc khôi phục ảnh đông nghĩa với việc nâng cao chất lượng
ảnh thu được so với ảnh gốc. Tuy nhiên , giữa sự khôi phục và nâng cao chất lượng
ảnh cũng có sự khác nhau, đó là nâng cao chất lượng ảnh là cố gắng cải thiện chất
lượng ảnh theo mục tiêu chủ quan đã được định sẵn; cịn khơi phục ảnh là cố gắng
loại bỏ những hư hại do nhiễu hoặc do quá trình xử lý gây ra, dựa trên các tiêu chuẩn
khách quan.
Vậy nếu một ảnh bị hư hại thì đại lượng nào là đại lượng bị ảnh hưởng nhiều
nhất ? Dễ nhận thấy đó chính là giá trị mức xám và vị trí của các pixel thành phần. Giá
trị mức xám có thể bị biến đổi và vị trí các pixel có thể bị biến dạng; có nghĩa là ảnh
có thể bị mờ hoặc bị méo mó. Do đó để khơi phục lại ảnh hồn chỉnh cần cải thiện giá
trị mức xám của các pixel, đồng thời khôi phục kích thước hình học của ảnh, chính là

phép ghi ảnh. Bời vì nó cho phép ta nhận ra các điểm tương ứng của hai ảnh trong
cùng một vùng dưới các góc nhìn khac nhau. Sự khơi phục có vai trò hết sức quan
trọng trong chup anh và truyền ảnh từ xa trong ghi ảnh y-sinh học hay trong liên lac vũ
trụ…
1.1.2 Phục chế ảnh
Sinh Viên: Nguyễn Trường Giang

Page 2


Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing.
Phục chế lại ảnh bao gồm việc làm giảm hoặc loại bỏ sự thối hóa, suy thối,
giảm sút chất lương việc thâu tóm và tái tạo hình ảnh của bức ảnh. Một ví dụ của sự
giảm sút chất lượng hình ảnh là “nhiễu” một lối mắc phải do độ phân giải hoạc hiệu
ứng ống kinh như : ảnh lọt ra khỏi tiêu cự quang học, nhòe do chuyển động ống kính.
Chúng ta có thể thấy một vài công nghệ phục chế thành công trong việc khôi phục các
vùng ảnh bằng phương thức khôi phục độ phân giải tại từng khu vực, một số khác sử
dụng giải pháp về miền tần số. Khôi phục ảnh là một trong những nội dung trọng tâm
của công nghệ ảnh số, tuy nhiên trong luận văn này chúng ta sẽ tập trung nhấn mạnh
vào cách thức khôi phục ảnh chứ không phải là sự suy giảm chất lượng ảnh.

1.2 Mơ hình suy thối ảnh
Trong một khơng gian miền ta có một bức ảnh f (x, y) và một không gian lọc h
(x, y) thu lại hình ảnh bị nhiễu, ta giả dụ rằng nếu h (x, y) bao gồm một dòng đơn nhất,
kết quả thu được là sự nhòe theo phương hướng của dịng đó ta có thể viết
g (x, y)= f (x, y) * h (x, y)
Trong đó * là khơng gian lọc, tuy nhiên đó chưa phải tất cả chúng ta cần cân
nhắc thêm sự nhiễu được mơ hình hóa như một chức năng của cuộn lại ( sự thu nhận
hình ảnh). Nếu η (x, y) đại diện cho biến cố ngẫu nhiên xảy ra ta có thể biểu diễn bức
ảnh bị hư hại theo biêu thức sau :

g (x, y)=f (x, y) * h (x, y) +η(x, y)
Chúng ta có thể biêu diễn những hoạt động tương tự trong miền tần số, noi sự
nếp lại được thay thế bởi nhân và có sự bổ sung thêm bởi tính tuyến tính của biến đổi
fourier
G(i,j)=F(i,j)H(i,j)+N(i,j)
Biểu diễn tổng thể một bức ảnh bị suy thoái F,H và N được biến đổi tương ứng
là f, h và n. Nếu chúng ta đã biết giá trị của H và N chúng ta có thể khơi phục F bằng
phương trình
F(i,j)=(G(i, j)-N(i, j))/H(i, j)
Tuy nhiên như chúng ta đã biết đây là phương pháp phi thực tiễn . Mặc dù
chúng ta đã biết một số thông tin thống kê và sự nhiễu nhưng chúng ta không biết các
giá trị của η(i, j) hoặc N(i,j) và bất kì giá trị nào khác. Mặt khác sự chia nhỏ H (i,j) là
một trở ngại lớn khi xuất hiện các giá trị gần bằng, ngang bằng hoặc bằng 0.

Sinh Viên: Nguyễn Trường Giang

Page 3


Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing.

Chương II.Giới thiệu chung về phần mềm Matlab
1.1 Khái niệm về Matlab
Matlab là một phần mềm ứng dụng chạy trong môi trường Windows do hãng
Mathwork sản xuất và cung cấp, là một ngơn ngữ lập trình thực hành bậc cao được sử
dụng để giải các bài tốn về kỹ thuật. Matlab tích hợp được việc tính tốn, thể hiện kết
quả, cho phép lập trình, giao diện làm việc rất dễ dàng cho người sử dụng. Dữ liệu
cùng với thư viện được lập trình sẵn cho phép người sử dụng có thể có được những
ứng dụng sau đây.
- Sử dụng các hàm có sẵn trong thư viện, các phép tính tốn học thơng thường.

- Cho phép lập trình tạo ra những ứng dụng mới.
- Cho phép mơ phỏng các mơ hình thực tế.
- Phân tích, khảo sát và hiển thị dữ liệu.
- Với phần mềm đồ hoạ cực mạnh.
- Cho phép phát triển, giao tiếp với một số phần mềm khác như C++, Fortran

1.2 Tổng quan về cấu trúc dữ liệu của Matlab, các ứng dụng
Matlab là một hệ thống tương giao, các phần tử dữ liệu là một mảng (mảng này
khơng địi hỏi về kích thước). Chúng cho phép giải quyết các vấn đề liên quanđến lập
trình bằng máy tính, đặc biệt sử dụng các phép tính về ma trận hay vectơ và có thể sử
dụng ngơn ngữ C học Fortran lập trình rồi thực hiện ứng dụng lập trình đó bằng các
câu lệnh gọi từ Matlab. Matlab được viết tắt từ chữ “MATrix LABoratory” tức là thư
viện về ma trận, từ đó phần mềm Matlab được viết nhằmcung cấp cho việc truy cập
vào phần mềm ma trận một cách dễ dàng, phần mềm ma trận này được phát triển bởi
các cơng trình Linpack và Eispack. Ngày nay Matlab được phát triển bởi Lapack và
Artpack tạo nên một nghệ thuật phần mềm cho ma trận.
1.2.1 Dữ liệu
Dữ liệu của Matlab thể hiện dưới dạng ma trận (hoặc mảng - tổng quát), và có
các kiểu dữ liệu được liệt kê sau đây:
- Kiểu đơn single, kiểu này có lợi về bộ nhớ dữ liệu vì nó địi hỏi ít byte nhớ hơn, kiểu
dữ liệu này khơng được sử dụng trong các phép tính tốn học, độ chính xác kém hơn.
-Kiểu double kiểu này là kiểu thông dụng nhất của các biến trong Matlab.
-Kiểu Sparse.
-Kiểu uint8, uint8, uint16, uint64...
-Kiểu char ví dụ “Hello”.
-Kiểu cell.
-Kiểu Structure.
-Trong Matlab kiểu dữ liệu double là kiểu mặc định sử dụng trong các phép tính số
học.
1.2.2 Ứng dụng

Sinh Viên: Nguyễn Trường Giang

Page 4


Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing.
Matlab tạo điều kiện thuận lợi cho:
-Các khoá học về toán học.
-Các kỹ sư, các nhà nghiên cứu khoa học.
-Dùng Matlab để tính tốn, nghiên cứu tạo ra các sản phẩm tốt nhất trong sản xuất.
1.2.3 Toolbox là một công cụ quan trọng trong Matlab
Công cụ này được Matlab cung cấp cho phép bạn ứng dụng các kỹ thuật
để phân tích, thiết kế, mơ phỏng các mơ hình.
Ta có thể tìm thấy toolbox ở trong mơ trường làm việc của.
- Mạng nơron.
- Logic mờ.
- Simulink.

1.3 Hệ thống Matlab
Hệ thống giao diện của Matlab được chia thành 5 phần:
- Môi trường phát triển.
Đây là nơi đặt các thanh công cụ, các phương tiện giúp chúng ta sử dụng các
lệnh và các file, ta có thể liệt kê một số như sau.
+ Desktop.
+ Command Window.
+ Command History.
+ Browsers for viewinghelp.
• Thư viện, các hàm tốn học bao gồm các cấu trúc như tính tổng, sin cosin atan,
atan2 etc..., các phép tính đơn giản đến các phép tính phức tạp như tính ma trận nghich
đảo, trị riêng, chuyển đổi fourier, laplace, symbolic library.

• Ngơn ngữ Matlab. Đó là các ngôn ngữ cao về ma trận và mảng, với các dịng lệnh,
các hàm, cấu trúc dữ liệu vào, có thể lập trình hướng đối tượng.
• Đồ hoạ trong Matlab. Bao gồm các câu lệnh thể hiện đồ họa trong môi trường 2D
và 3D, tạo các hình ảnh chuyển động, cung cấp các giao diện tương tác giữa người sử
dụng và máy tính.
• Giao tiếp với các ngơn ngữ khác. Matlab cho phép tương tác với các ngôn ngữ khác
như C, Fortran …

1.4 Làm quen với Matlab
Trước tiên để khởi động Matlab bạn kích click vào biểu tượng file Matlab.exe,
trên màn hình xuất hiện cửa sổ sau. (Xem hình vẽ 1.1) Cửa sổ đó chứa
các thanh cơng cụ (Giao diện người và máy) cần thiết cho việc quản lý các files,
các biến, cửa sổ lệnh, có thể coi desktop là các panel gồm các ô, vùng, quản lý và
tác dụng của từng cửa sổ nhỏ được quản lý bởi desktop.

Sinh Viên: Nguyễn Trường Giang

Page 5


Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing.

Hình 2.1: Cửa sổ làm việc của matlab

1.5 Các cửa sổ làm việc của Matlab
a) Cửa sổ Command Window
Là cửa sổ giao tiếp chính của Matlab bởi đây là nơi nhập giá trị các biến, hiển
thị giá trị, tính tốn giá trị của biểu thức, thực thi các hàm có sẵn trong thư viện
(dạng lệnh), hoặc các hàm (dạng function) do người dùng lập trình ra trong M-file.
Các lệnh được nhập sau dấu nhắc “>>”, và nếu có sai sót trong q trình gõ (nhập)

lệnh thì hãy nhấn phím Enter cho đến khi nhận được dấu nhắc “>>”. Thực
thi lệnh bằng nhấn phím Enter.
Gõ các lệnh sau:
>>A=pi/2;
>>B=sin(A)
B=
1
Hoặc chương trình soạn thảo trong M-file dưới đây:
% Chuong trinh trong M-file
x= 0:pi/6:2*pi;
y=sin(x);
Sinh Viên: Nguyễn Trường Giang

Page 6


Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing.
plot(x, y);
% chuong trinh được lưu với tên file là “ve_sin.m”
b)Cửa sổ command History
Các dòng mà bạn nhập vào trong cửa sổ Command Window (các dòng này có
thể là dịng nhập biến, hoặc có thể là dịng lệnh thực hiện hàm nào đó) được giữ
lại trong cửa sổ Command History, và cửa sổ này cho phép ta sử dụng lại những lệnh
đó bằng cách click chuột lên các lệnh đó hoặc các biến, nếu như bạn muốn sử dụng lại
biến đó. Xem hình 1.2

Hình 2.2 Cửa sổ Command History

c) Cửa sổ Workspace
Là cửa sổ thể hiện tên các biến bạn sử dụng cùng với kích thước vùng nhớ (số

bytes), kiểu dữ liệu(lớp), các biến được giải phóng sau mỗi lần tắt chương trình.
(xem hình 1.3)

Sinh Viên: Nguyễn Trường Giang

Page 7


Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing.

Hình 2.3 Cửa sổ Workspace
Ngồi ra nó cho phép thay đổi giá trị, cũng như kích thước của biến bằng cách click
chuột lên các biến. Hoặc click vào nút bên trái ngay cạnh nút save. Ví dụkhi chọn biến
(giả sử là biến b) rồi click (hoặc click chuột vào nút cạnh nút save) ta được cửa sổ sau
gọi là Variable Editor (xem hình 1.4)

Hình 2.4 Cửa sổ Variable Editor
Tiêu đề là tên biến b, định dạng dữ liệu ở ơ có tên là: Numeric format, mặc định là
dạng short, kích thước size là 1 by 3 (tức là một hàng và 3 cột) ta có thể thayđổi kích
thước này bằng cách thay đổi giá trị có trong ơ kích thước size. Dùng cửa sổ này để
lưu các biến ở dưới là dữ liệu của biến b, ta có thể thayđổi chúng bằng cách thay đổi
giá trị trong các ơ đó. Tất cả các biến đều được lưu trong Workspace trong đó thể hiện
cả kích thước (Size), số Bytes và kiểu dữ liệu(class) (8 bytes cho mỗi phần tử dữ liệu
kiểu double cụ thể là 24 bytes dành cho b và 8 bytes dành cho a).
d) Cửa sổ M-file
Là một cửa sổ dùng để soạn thảo chương trình ứng dụng, để thực thi chương trình viết
trong M-file bằng cách gõ tên của file chứa chương trình đó trong cửa sổ

Sinh Viên: Nguyễn Trường Giang


Page 8


Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing.
Commandwindow. Khi một chương trình viết trong M-file, thì tuỳ theo ứng dụng cụ
thể, tuỳ theo người lập trình mà chương trình có thể viết dưới dạng sau:
- Dạng Script file: Tức là chương trình gồm tập hợp các câu lệnh viết dưới dạng liệt
kê, không có biến dữ liệu vào và biến lấy giá trị ra.
- Dạng hàm function: có biến dữ liệu vào và biến ra.
e) Đường dẫn thư mục: Nơi lưu giữ các files chương trình.

1.6 Giới thiệu khái quát về ảnh số
1.6.1 Các khái niệm cơ bản về ảnh
Ảnh số là tập hợp hữu hạn các điểm ảnh với mức xám phù hợp dùng để mô tả
ảnh gần với ảnh thật. Số điểm ảnh xác định độ phân giải của ảnh. Ảnh có độ phân giải
càng cao thì càng thể hiện rõ nét các đặt điểm của tấm hình càng làm cho tấm ảnh trở
nên thực và sắc nét hơn.
a) Điểm ảnh (Picture Element)
Đ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.
b) Mức xám của ảnh
Mức xám: Là kết quả của sự biến đổi tương ứng 1 giá trị độ sáng của 1
điểm ảnh với 1 giá trị nguyên dương. Thông thường nó xác định trong [0, 255] tuỳ
thuộc vào giá trị mà mỗi điểm ảnh được biểu diễn. Các thang giá trị mức xám thông
thường: 16, 32, 64, 128, 256 (Mức 256 là mức phổ dụng. Lý do: từ kỹ thuật máy tính
dùng 1 byte (8 bit) để biểu diễn mức xám. Mức xám dùng 1 byte biểu diễn: 28 =256
mức, tức là từ 0 đến 255).

c) Độ phân giải của ảnh
Định nghĩa: Độ phân giải (Resolution) của ảnh là mật độ điểm ảnh được
ấn định trên một ảnh số được hiển thị.
Theo định nghĩa, khoảng cách giữa các điểm ảnh phải được chọn sao cho mắt
người vẫn thấy được sự liên tục của ảnh. Việc lựa chọn khoảng cách thích hợp tạo nên
một mật độ phân bổ, đó chính là độ phân giải và được phân bố theo trục x và y trong
khơng gian hai chiều.
Ví dụ: Độ phân giải của ảnh trên màn hình CGA (Color Graphic Adaptor)
là một lưới điểm theo chiều ngang màn hình: 320 điểm chiều dọc * 200 điểm
Sinh Viên: Nguyễn Trường Giang

Page 9


Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing.
ảnh (320*200). Rõ ràng, cùng màn hình CGA 12” ta nhận thấy mịn hơn màn hình
CGA 17” độ phân giải 320*200. Lý do: cùng một mật độ (độ phân giải) nhưng diện
tích màn hình rộng hơn thì độ mịn (liên tục của các điểm) kém hơn.

2. Các cách phân loại ảnh
Ảnh nhị phân: Giá trị xám của tất cả các điểm ảnh chỉ nhận giá trị 1 hoặc 0 như vậy
mỗi điểm ảnh trong ảnh nhị phân được biểu diễn bởi 1 bit.
Ảnh xám: Giá trị xám nằm trong [0, 255] như vậy mỗi điểm ảnh trong ảnh nhị phân
được biểu diễn bởi 1 byte.
Ảnh màu:
- Hệ màu RGB:
Một pixel được biểu diễn bằng 3 giá trị (R, G, B) trong đó R, G, B là một giá trị xám
và được biểu biểu diễn bằng 1 byte. Khi đó ta có một ảnh 24 bits.
P(x, y) = (R, G, B)
- Hệ màu CMY: là phần bù của hệ màu RGB

(C, M, Y) = (1, 1, 1) - (R, G, B)
Hay C+R=M+G=Y+B=1
=> Hệ màu này thường được dùng trong máy in.
- Hệ màu CMYK: trong đó K là độ đậm nhạt của màu K= min(C, M, Y)
P(x, y) = (C-K, M-K, V-K, K).
Ví dụ:
Với (C1, M1, Y1) ta sẽ có K=min(C1, M1, Y1)
vậy CMYK=(C1-K, M1-K, Y1-K, K)

3. Xử lý ảnh với Matlab
3.1 Xử lý ảnh
Các bước cần thiết trong xử lý ảnh. Đầu tiên, ảnh tự nhiên từ thế giới
ngoài được thu nhận qua các thiết bị thu (như Camera, máy chụp ảnh). Trước đây, ảnh
thu qua Camera là các ảnh tương tự (loại Camera ống kiểu CCIR). Gần đây, với sự
phát triển của công nghệ, ảnh màu hoặc đen trắng được lấy ra từ Camera, sau đó nó
được chuyển trực tiếp thành ảnh số tạo thuận lợi cho xử lý tiếp theo. Máy ảnh số hiện
Sinh Viên: Nguyễn Trường Giang

Page 10


Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing.
nay là một thí dụ gần gũi. Mặt khác, ảnh cũng có thể tiếp nhận từ vệ tinh; có thể quét
từ ảnh chụp bằng máy quét ảnh. Hình dưới đây mơ tả các bước cơ bản trong xử lý ảnh.

Hình 2.5 Các bước cơ bản trong xử lý ảnh
3.2 Các giai đoạn xử lý ảnh
a) Thu nhận ảnh (Image Acquisition)
- Ảnh được thu từ nhiều nguồn khác nhau:máy ảnh, máy quay phim, máy quét, ảnh vệ
tinh…

- Mục đích: biến đổi thơng tin hình ảnh về các cấu trúc được lưu trữ trong máy tính,
có thể hiển thị ra các thiết bị ngoại vi như là máy in, màn hình…
- Gồm hai tiến trình:
+ Biến đổi năng lượng quang học thành năng lượng điện.
+ Tổng hợp năng lượng điện thành ảnh hoặc ma trận số.
b) Tiền xử lý (PreProcessing)
- Là quá trình sử dụng các kỹ thuật xử lý ảnh để làm ảnh tốt lên theo mục đích sử
dụng.
- Mục đích:
+ Điều chỉnh độ chiếu sáng để khắc phục hậu quả của việc chiếu sáng không đều.
+ Giảm nhỏ thành phần nhiễu của ảnh tức là các đối tượng xuất hiện ngoài ý muốn.
+ Hiệu chỉnh giá trị độ sáng giữa nền và đối tượng.
+ Chuẩn hoá độ lớn, màu, dạng của ảnh.
+ Điều chỉnh bộ lọc để khuyếch đại và nén các tần số.
c) Phân đoạn (Segmentation)
Sinh Viên: Nguyễn Trường Giang

Page 11


Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing.
- Là quá trình phân chia nội dung các đối tượng cần khảo sát ra khỏi ảnh.
- Phân chia các đối tượng tiếp giáp nhau.
- Phân tách các đối tượng riêng biệt thành các đối tượng con.
d) Biểu diễn ảnh (Image Representation)
Đầu ra ảnh sau phân đoạn chứa các điểm ảnh của vùng ảnh (ảnh đã
phân đoạn) cộng với mã liên kết với các vùng lận cận. Việc biến đổi các số liệu này
thành dạng thích hợp là cần thiết cho xử lý tiếp theo bằng máy tính. Việc chọn các
tính chất để thể hiện ảnh gọi là trích chọn đặc trưng (Feature Selection) gắn với việc
tách các đặc tính của ảnh dưới dạng các thơng tin định lượng hoặc làm cơ sở để

phân biệt lớp đối tượng này với đối tượng khác trong phạm vi ảnh nhận được.
Ví dụ: trong nhận dạng ký tự trên phong bì thư, chúng ta miêu tả các đặc trưng của
từng ký tự giúp phân biệt ký tự này với ký tự khác.
e) Nhận dạng và nội suy ảnh (Image Recognition and Interpretation)
Nhận dạng ảnh là quá trình xác định ảnh. Quá trình này thường thu
được bằng cách so sánh với mẫu chuẩn đã được học (hoặc lưu) từ trước. Nội suy là
phán đoán theo ý nghĩa trên cơ sở nhận dạng.
Ví dụ: một loạt chữ số và nét gạch ngang trên phong bì thư có thể được nộisuy thành
mã điện thoại. Có nhiều cách phân loai ảnh khác nhau về ảnh. Theo lý thuyết về
nhận dạng, các mơ hình toán học về ảnh được phân theo hai loại nhận dạng ảnh cơ
bản:
- Nhận dạng theo tham số.
- Nhận dạng theo cấu trúc.
Một số đối tượng nhận dạng khá phổ biến hiện nay đang được áp dụng trong khoa học
và công nghệ là: nhận dạng ký tự (chữ in, chữ viết tay, chữ ký điện tử), nhận dạng văn
bản (Text), nhận dạng vân tay, nhận dạng mã vạch, nhận dạng mặt
người…
f) Cơ sở tri thức (Knowledge Base)
Như đã nói ở trên, ảnh là một đối tượng khá phức tạp về đường nét, độ sáng tối,
dung lượng điểm ảnh, môi trường để thu ảnh phong phú kéo theo nhiễu. Trong nhiều
khâu xử lý và phân tích ảnh ngồi việc đơn giản hóa các phương pháp tốn học đảm
bảo tiện lợi cho xử lý, người ta mong muốn bắt chước quy trình tiếp nhận và xử lý
ảnh theo cách của con người. Trong các bước xử lý đó, nhiều khâu hiện nay đã xử lý
theo các phương pháp trí tuệ con người. Vì vậy, ở đây các cơ sở tri thức được phát
huy.

Sinh Viên: Nguyễn Trường Giang

Page 12



Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing.

Chương III.

Các hàm xử lý ảnh trong matlab

1.Các kiểu ảnh trong Matlab
1.1 Ảnh được định chỉ số (Indexed Images)
Một ảnh chỉ số bao gồm một ma trận dữ liệu X và ma trận bản đồ màu map. Ma trận dữ liệu có
thể có kiểu thuộc lớp uint8, uint16 hoặc kiểu double. Ma trận bản đồ màu là một mảng mx3 kiểu
double bao gồm các giá trị dấu phẩy động nằm giữa 0 và 1. Mỗi hàng của bản đồ chỉ ra các giá trị
mà: red, green và blue của một màu đơn. Một ảnh chỉ số sử dụng ánh xạ trực tiếp giữa giá trị của
pixel ảnh tới giá trị trong bản đồ màu. Màu sắc của mỗi pixel ảnh được tính tốn bằng cách sử
dụng giá trị tương ứng của X ánh xạ tới một giá trị chỉ số của map. Giá trị 1 chỉ ra hàng đầu tiên,
giá trị 2 chỉ ra hàng thứ hai trong bản đồ màu …
Một bản đồ màu thường được chứa cùng với ảnh chỉ số và được tự động nạp cùng với ảnh khi sử
dụng hàm imread để đọc ảnh. Tuy nhiên, ta không bị giới hạn khi sử dụng bản đồ màu mặc định,
ta có thể sử dụng bất kì bản đồ màu nào.

1.2 Ảnh cường độ (Intensity Images)
Một ảnh cường độ là một ma trận dữ liệu ảnh I mà giá trị của nó đại diện cho cường độ trong
một số vùng nào đó của ảnh. Matlab chứa một ảnh cường độ như một ma trận đơn, với mỗi
phần tử của ma trận tương ứng với một pixel của ảnh. Ma trận có thể thuộc lớp double, uint8
hay uint16. Trong khi ảnh cường độ hiếm khi được lưu với bản đồ màu, Matlab sử dụng bản đồ
màu để hiển thị chúng.
Những phần tử trong ma trận cường độ đại diện cho các cường độ khác nhau hoặc độ xám.
Những điểm có cường độ bằng 0 thường được đại diện bằng màu đen và cường độ 1,255 hoặc
65535 thường đại diện cho cường độ cao nhất hay màu trắng.


1.3 Ảnh nhị phân (Binary Images)
Trong một ảnh nhị phân, mỗi pixel chỉ có thể chứa một trong hai giá trị nhị phân 0 hoặc 1. Hai giá
trị này tương ứng với bật hoặc tắt (on hoặc off). Một ảnh nhị
phân được lưu trữ như một mảng logic của 0 và 1.

1.4 Ảnh RGB (RGB Images)
Một ảnh RGB - thường được gọi là true-color, được lưu trữ trong Matlab dưới dạng một mảng
dữ liệu có kích thước 3 chiều mxnx3 định nghĩa các giá trị màu red, green và blue cho mỗi pixel
riêng biệt. Ảnh RGB không sử dụng palette. Màu của mỗi pixel được quyết định bởi sự kết hợp
giữa các giá trị R, G, B (Red, Green, Blue) được lưu trữ trong một mặt phẳng màu tại vị trí của
pixel. Định dạng file đồ hoạ lưu trữ ảnh RGB giống như một ảnh 24 bits trong đó R, G, B chiếm
tương ứng 8 bit một. Điều này cho phép nhận được 16 triệu màu khác nhau.
Một mảng RGB có thể thuộc lớp double, uint8 hoặc uint16. Trong một mảng RGB thuộc lớp
double, mỗi thành phần màu có giá trị giữa 0 và 1. Một pixel mà thành phần màu của nó là (0, 0,
0) được hiển thị với màu đen và một pixel mà thành phần màu là (1, 1, 1 ) được hiển thị với màu
trắng. Ba thành phần màu của mỗi pixel được lưu trữ cùng với chiều thứ 3 của mảng dữ liệu.
Chẳng hạn, giá trị màu R, G, B của pixel (10, 5) được lưu trữ trong RGB(10, 5, 1), RGB(10, 5, 2) và

Sinh Viên: Nguyễn Trường Giang

Page 13


Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing.
RGB(10, 5, 3) tương ứng.
Để tính toán màu sắc của pixel tại hàng 2 và cột 3 chẳng hạn, ta nhìn vào bộ ba giá trị được lưu
trữ trong (2, 3, 1:3). Giả sử (2, 3, 1) chứa giá trị 0.5176; (2, 3, 2) chứa giá trị 0.1608 và (2, 3, 3)
chứa giá trị 0.0627 thì màu sắc của pixel tại (2, 3) sẽ là (0.5176, 0.1608, 0.0627).

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

2.1 Đọc và ghi dữ liệu ảnh
Đọc một ảnh đồ hoạ
- 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’);

Trong ví dụ này, imread sẽ nhận ra định dạng file để sử dụng từ tên file. Ta cũng có
thể chỉ ra định dạng file như một tham số trong hàm imread. 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 … Để
biết thêm các kiểu gọi hàm và tham số truyền vào, xem trợ giúp online của Matlab.
Đọc nhiều ảnh từ một file đồ hoạ
- Matlab trợ giúp một số định dạng file đồ hoạ chẳng hạn như: HDF và TIFF, chúng
chứa nhiều ảnh. Theo mặc định, imread chỉ trợ giúp ảnh đầu tiên trong file. Để nhập
thêm các ảnh từ file, sử dụng cú pháp được trợ giúp bởi định dạng file. Chẳng hạn, khi
được sử dụng với TIFF, ta có thể sử dụng một giá trị chỉ số với imread để chỉ ra ảnh
mà ta muốn nhập vào.
Ví dụ sau đây đọc một chuỗi 27 ảnh từ một file TIFF và lưu những ảnh này trong một
mảng 4 chiều. Ta có thể sử dụng hàm iminfo để xem bao nhiêu ảnh đã được lưu trữ
trong file:
mri = uint8(zeros(128,128,1,27)); % preallocate 4-D array
for frame=1:27
[mri(:,:,:,frame),map] = imread('mri.tif',frame);
End


- Khi file chứa nhiều ảnh theo một số kiểu nhất định chẳng hạn theo thứ tự thời gian,
ta có thể lưu ảnh trong Matlab dưới dạng mảng 4 chiều. Tất cả các ảnh phải có cùng
kích thước.

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.
Sinh Viên: Nguyễn Trường Giang

Page 14


Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing.
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ụ sau tải một ảnh chỉ số X từ một file Map với bản đồ màu kết hợp với nó map sau
đó ghi ảnh xuống một file bitmap.

load clown
whos
Name
X

Size
200x320

caption
map

Bytes Class

512000 double array

2x1
81x3

4 char array
1944 double array

Grand total is 64245 elements using 513948 bytes
imwrite(X,map,'clown.bmp')

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ụ. Ví dụ sau sẽ chi một ảnh
cường độ I với một file ảnh 4 bit PNG.
imwrite(I,'clown.png','BitDepth',4 );

- Để 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
- 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.
- Ví dụ sau đọc một ảnh nhị phân và ghi nó dưới dạng file TIFF. Bởi vì định dạng
TIFF trợ giúp ảnh 1 bit, file được ghi lên đĩa theo định dạng 1 bit:
BW = imread('text.png');
imwrite(BW,'test.tif');

Để kiểm tra chiều sâu bit của file test.tif, gọi hàm iminfo và kiểm tra trường BitDepth
của nó:

info = imfinfo('test.tif');info.BitDepth
ans =1

Chú ý: Khi ghi file nhị phân, Matlab thiết lập trường ColorType thành ‘grayscale’.
Sinh Viên: Nguyễn Trường Giang

Page 15


Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing.
Xem lớp lưu trữ của file
- Hàm imwrite sử dụng luật sau đây để quyết định lớp lưu trữ được sử dụng trong ảnh
kết quả:
+ logical: Nếu định dạng ảnh ra (Output Image) được chỉ rõ là trợ giúp ảnh 1 bit, hàm
imwrite tạo một file ảnh 1 bit. Nếu định dạng ảnh ra được chỉ rõ là không trợ giúp ảnh
1 bit (như JPEG), hàm imwrite chuyển ảnh tới một ảnh thuộc lớp uint8.
+ uint8: Nếu định dạng ảnh ra được chỉ rõ là trợ giúp ảnh 8 bit, hàm imwrite tạo một
ảnh 8 bit
+ uint16: Nếu định dạng ảnh ra được chỉ rõ trợ giúp ảnh 16 bit (PNG hoặc TIFF), hàm
imwrite tạo một ảnh 16 bit. Nếu định dạng ảnh ra không trợ giúp ảnh 16 bit, hàm
chuyển đổi dữ liệu ảnh tới lớp uint8 và tạo một ảnh 8 bit.
+ double: Matlab chuyển dữ liệu ảnh tới dạng uint8 và tạo một ảnh 8 bit bởi vì hầu hết
các file ảnh sử dụng định dạng 8 bit.
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ó ln 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ố …
2.2 Hiển thị ảnh

Dùng hàm imview
- Để hiển thị một ảnh sử dụng hàm imview, dùng hàm imview, chỉ rõ ảnh mà ta muốn
hiển thị. 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);

Sinh Viên: Nguyễn Trường Giang

Page 16


Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing.
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ị.
Xem nhiều ảnh
- Nếu ta chỉ ra một file mà chứa nhiều ảnh, hàm imview chỉ hiển thị ảnh đầu tiên trong file đó. Để
xem tất cả các ảnh trong file, sử dụng hàm imread để nhập mỗi ảnh vào trong khơng gian làm
việc của Matlab sau đó gọi hàm imview nhiều lần để hiển thị mỗi ảnh riêng biệt.

Dùng hàm imshow
- Để xem ảnh, ta có thể sử dụng hàm imshow thay cho imview. 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.
2.3 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 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.
Sinh Viên: Nguyễn Trường Giang

Page 17


Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing.
- 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 );
- Ả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

.

Chuyển đổi không gian màu
- Toolbox xử lý ảnh biểu diễn màu sắc như các giá trị RGB ( trực tiếp trong ảnh RGB
hoặc gián tiếp trong ảnh chỉ số ). Tuy nhiên, có các phương pháp khác cho việc biểu
diễn màu sắc. Chẳng hạn, một màu có thể được đại diện bởi các giá trị hue, saturation
và các giá trị thành phần (HSV). Các phương pháp khác cho việc biểu diễn màu được
gọi là không gian màu.
- Toolbox cung cấp một tập các thủ tục để chuyển đổi giữa các không gian màu. Các
hàm xử lý ảnh tự chúng coi dữ liệu màu sắc dưới dạng RGB tuy nhiên, ta có thể xử lý
một ảnh mà sử dụng các không gian màu khác nhau bằng cách chuyển đổi nó sang
RGB sau đó chuyển đổi ảnh đã được xử lý trở lại không gian màu ban đầu.
2.4 Chuyển đổi định dạng các file ảnh
- Để thay đổi định dạng đồ hoạ của một ảnh, sử dụng hàm imread để đọc một ảnh và
sau đó lưu nó với hàm imwrite đồng thời chỉ ra định dạng tương ứng.
- Để minh hoạ, ví dụ sau đây sử dụng hàm imread để đọc một file BMP vào khơng
gian làm việc.Sau đó, hàm imwrite lưu ảnh này dưới định dạng PNG
bitmap = imread('mybitmap.bmp','bmp');
imwrite(bitmap,'mybitmap.png','png');
2.5 Số học ảnh
- Số học ảnh sự ứng dụng của các phép toán số học chuẩn như: cộng, trừ, nhân, chia
lên ảnh. Số học ảnh được sử dụng nhiều trong xử lý ảnh trong cả các bước ban đầu lẫn
Sinh Viên: Nguyễn Trường Giang

Page 18


Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing.
các thao tác phức tạp hơn. Chẳng hạn, trừ ảnh có thể được sử dụng để phát hiện sự
khác nhau giữa hai hoặc nhiều ảnh của cùng một cảnh hoặc một vật.

- Ta có thể thực hiện số học ảnh sử dụng các toán tử số học của Matlab.
Toolbox xử lý ảnh bao gồm một tập hợp các hàm ứng dụng các phép toán số học trên
tất cả các con số không lấp đầy. Hàm số học của toolbox chấp nhận bất kì kiểu dữ liệu
số nào bao gồm uint8, uint16 hay double và trả lại ảnh kết quả trong cùng định dạng.
Các hàm thực hiện các phép tốn với độ chính xác kép trên từng phần tử nhưng khơng
chuyển đổi ảnh tới giá trị chính xác kép trong không gian làm việc của Matlab. Sự tràn
số được điều khiển tự động. Hàm sẽ cắt bỏ giá trị trả về để vừa với kiểu dữ liệu.
Luật cắt bỏ trong số học ảnh
- Kết quả của số học nguyên có thể dễ dàng tràn số dùng cho lưu trữ. Chẳng hạn, giá
trị cực đại ta có thể lưu trữ trong uint8 là 255. Các phép toán số học có thể trả về giá trị
phân số - khơng được biểu diễn bởi một chuỗi số nguyên.
- Các hàm số học ảnh sử dụng những luật này cho số học nguyên:
+ Giá trị vượt quá khoảng của kiểu số nguyên bị cắt bỏ tới khoảng đó
+ Giá trị phân số được làm trịn Chẳng hạn, nếu dữ liệu có kiểu uint8, kết quả trả về
nếu lớn hơn 255 ( bao gồm Inf ) thì được gán là 255.
Lời gọi lồng nhau tới hàm số học ảnh
- Ta có thể sử dụng các hàm số học ảnh kết hợp để thực hiện một chuỗi các phép
tốn. Chẳng hạn để tính giá trị trung bình của hai ảnh:
C=(A+B) /2
Ta có thể nhập vào như sau:
I = imread('rice.png');
I2 = imread('cameraman.tif');
K = imdivide(imadd(I,I2), 2); % not recommended

- Khi được sử dụng với kiểu uint8 hay uint16, mỗi hàm số học cắt kết quả của nó
trước khi truyền nó cho hàm thiếp theo. Sự cắt bỏ này có thể giảm đáng kể lượng
thơng tin trong ảnh cuối cùng. Một cách làm tốt hơn để thực hiện một chuỗi các tính
tốn là sử dụng hàm imlincomb. Hàm này thi hành tất cả các phép toán số học trong sự
kết hợp tuyến tính của độ chính xác kép và chỉ cắt bỏ kết quả cuối cùng:
K = imlincomb(.5,I,.5,I2); % recommended


3. Biến đổi không gian ảnh
Biến đổi không gian ảnh là thực hiện ánh xạ giữa vị trí các pixel trong ảnh vào với các
pixel trong ảnh ra.
3.1 Bảng thuật ngữ
Aliasing : Răng cưa - xuất hiện khi giảm kích thước ảnh. Khi kích thước của một ảnh bị

giảm, các pixel gốc bị lấy mẫu giảm để tạo ra ít pixel hơn. Aliasing xảy ra như kết quả
của việc giảm kích thước ảnh thường xuất hiện dưới dạng bậc thang ( đặc biệt trong
các ảnh có độ tương phản cao )
Antialiasing : Các biện pháp chống răng cưa cho ảnh

Sinh Viên: Nguyễn Trường Giang

Page 19


Tìm hiểu lập trình trong MatLab. Tìm hiểu và hướng dẫn sử dụng Image Processing.
Bicubic interpolation : Giá trị của các pixel ra được tính tốn từ giá trị trung bình của

4x4 pixel lân cận Bilinear interpolation : Gía trị của pixel ra được tính tốn từ giá trị
trung bình của 2x2 pixel lân cận
Geometric operation : Một thao tác sửa đổi quan hệ hình học gữa các pixel trong một
ảnh. Chẳng hạn thay đổi kích thước ảnh, quay ảnh và xén ảnh
Interpolation : Quá trình được sử dụng để ước lượng giá trị ảnh ở một vị trí giữa các
pixel
Nearest-neighbor interpolation : Các giá trị pixel ra được gán giá trị của pixel nằm
trong một vùng gần pixel đó.
3.2 Nội suy
Nội suy là quá trình sử dụng để ước lượng một giá trị ảnh ở một vị trí giữa các pixel.

Chẳng hạn, nếu ta thay đổi kích thước một ảnh, nó sẽ chứa nhiều pixel hơn ảnh gốc,
toolbox sử dụng sự nội suy để tính giá trị cho các pixel thêm vào. Hàm imresize và
imrotate sử dụng nội suy hai chiều để thực hiện thao tác của mình. Hàm improfile
cũng sử dụng sự nội suy hoá.
Các phương pháp nội suy
- Toolbox sử lý ảnh cung cấp 3 cách nội suy hoá
+ Nội suy các pixel gần nhất ( nearest –neighbor interpolation )
+ Nội suy song tuyến tính ( Bilinear interpolation )
+ Nội suy song khối ( Bicubic interpolation )
Các phương pháp nội suy làm việc theo một cách giống nhau. Trong mỗi trường hợp,
để tính giá trị của một pixel đã được nội suy, chúng tìm điểm trong ảnh ra mà pixel
nằm tại đó. Sau đó, chúng gán một giá trị tới các pixel ra bằng cách tính tốn giá trị
trung bình có trọng số của một số pixel lân cận. Trọng số dựa trên cơ sở khoảng cách
tới điểm đang xét.
- Các phương pháp này khác nhau ở tập các pixel mà chúng xem xét:
+ Với nội suy các pixel gần nhất: pixel ra được gán giá trị của các pixel ở gần nó
nhất. Các pixel khác khơng được xem xét.
+ Nội suy song tuyến tính, giá trị của pixel ra là giá trị trung bình theo trọng số của
2x2 pixel lân cận.
+ Nội suy song khối: giá trị của pixel ra là trung bình có trọng số của 4x4 pixel lân
cận.
Số lượng các pixel được xem xét ảnh hưởng đến độ phức tạp tính tốn. Vì vậy,
phương pháp song tuyến tính mất nhiều thời gian hơn phương pháp thứ nhất và
phương pháp song khối mất nhiều thời gian hơn song tuyến tính. Tuy nhiên, số lượng
pixel lớn hơn, độ chính xác sẽ tốt hơn.
Kiểu ảnh
- Các hàm sử dụng tuyến tính yêu cầu một tham số chỉ ra phương pháp nội suy. Với
hầu hết các hàm, phương pháp mặc định được sử dụng là nearest-neighbor
interpolation. Phương pháp này tạo ra một kết quả có thể chấp nhận được cho hầu hết
các ảnh và là phương pháp duy nhất thích hợp với ảnh chỉ số. Với ảnh cường độ hay

RGB, tuy nhiên ta thường chỉ ra kiểu song tuyến tính hoặc song khối bởi vì những
phương pháp này cho kết quả tốt hơn
Sinh Viên: Nguyễn Trường Giang

Page 20


×