1 Bài giảng THỊ GIÁC MÁY TÍNH TRONG CƠ ĐIỆN TỬ Bộ môn Kỹ thuật Cơ điện tử Nội dung môn học • Chương 1 Giới thiệu • Chương 2 Kiến thức cơ bản • Chương 3 Màu sắc, điểm ảnh và lọc • Chương 4 Tiền xử lý ả[.]
Trang 1Bài giảng
THỊ GIÁC MÁY TÍNH
TRONG CƠ ĐIỆN TỬ
Bộ môn Kỹ thuật Cơ điện tử
Nội dung môn học
• Chương 1: Giới thiệu
• Chương 2: Kiến thức cơ bản
• Chương 3: Màu sắc, điểm ảnh và lọc
• Chương 4: Tiền xử lý ảnh
• Chương 5: Máy học trong xử lý ảnh
Trang 2Đánh giá
• Bài tập, kiểm tra, chuyên cần 40%
– Bài tập được nộp cùng với python files hoặc
ipython notebook đã được chuyển sang pdf hoặc
html
– Nhận bài qua email:hieubv@tlu.edu.vn
– Bài kiểm tra được thực hiện vào tuần thứ 6 của
môn học
– Điểm chuyên cần (nghỉ 1 buổi trừ 1 điểm, nghỉ
không quá 20%)
• Điểm thi cuối kỳ chiếm 60% gồm:
– 03 câu lý thuyết và bài tập
Chương 1: Giới thiệu Thị giác máy tính
Trang 3Lịch sử
Leonardo da Vinci,
16 th Century AD
This work is in the public domain
This work is in the public domain
Tế bào phức tạp
Phản ứng với hướng ánh
sáng và sự di chuyển
Tế bào siêu phưc tạp:
Phản ứng với sự di chuyển ở điểm
cuối
Trang 4Block world
Larry Roberts, 1963
(a) Original picture (b) Differentiated picture (c) Feature points selected
This image is CC0 1.0 public domain This imageisCC0 1.0public domain
Input image Edge image 2 ½-D sketch 3-D model
sơ bộ cạnh, đường
ảo, nhóm, đường cong, ranh giới
2 ½-D Bản thảo
Biểu diễn cục
bộ và sự rời rạc theo chiều sâu
và hướng bề mặt
Mô hình 3-D
Mô hình 3 D được sắp xếp theo thứ bậc của thể tích và
bề mặt
Stages of Visual Representation, David Marr, 1970s
Trang 5• Generalized Cylinder • Pictorial Structure
Fischler and Elschlager, 1973 Brooks & Binford, 1979
Normalized Cut (Shi & Malik, 1997)
Image is CC BY 3.0 Image is public domain Image is CC-BY SA 3.0
Trang 6Thị giác là gì?
• Thị giác được lấy cảm hứng từ con người/động vật
được hoạt động phụ thuộc vào hai thành phần.
– Đầu tiên, tế bảo cảm nhận ghi lại càng nhiều chi tiết từ
một hình ảnh càng tốt Mắt sẽ thu nhận ánh sáng đi qua
mống mắt và chiếu đến võng mạc, nơi các tế bào chuyên
biệt sẽ truyền thông tin đến não thông qua các tế bào thần
kinh.
• Một máy ảnh chụp ảnh theo cách tương tự và truyền pixel đến
máy tính Ở phần này, máy ảnh tốt hơn con người vì chúng có
thể nhìn thấy tia hồng ngoại, nhìn xa hơn hoặc chính xác hơn.
– Thứ hai, thiết bị thông dịch phải xử lý thông tin và trích
xuất ý nghĩa từ nó Bộ não của con người giải quyết vấn
đề này theo nhiều bước ở các vùng khác nhau của não.
• Thị giác máy tính vẫn kém hiệu suất của con người trong lĩnh
vực này.
Thị giác máy tính là gì?
• Hai định nghĩa về thị giác máy tính
(computer vision):
• Thị giác máy tính có thể được định nghĩa là một
lĩnh vực khoa học trích xuất thông tin ra khỏi hình
ảnh kỹ thuật số Loại thông tin thu được từ hình
ảnh có thể thay đổi từ nhận dạng, đo không gian
để điều khiển hoặc các ứng dụng thực tế tăng
cường.
• Thị giác máy tính là để xây dựng các thuật toán có
thể hiểu nội dung của hình ảnh và sử dụng nó cho
các ứng dụng khác.
Trang 7Lấy thông tin từ ảnh
– Chúng ta có thể chia thông tin thu được từ
hình ảnh trong thị giác máy tính thành hai
loại: phép đo và thông tin ngữ nghĩa
– Thị giác như một thiết bị đo lường
• Robot điều hướng ở một vị trí không xác định cần
có khả năng quét môi trường xung quanh để tính
toán
• Một cặp máy ảnh đưa ra thông tin về độ sâu như
mắt người thông qua phép đo tam giác
• Tăng số điểm quan sát có thể tạo ra bề mặt 3D
Lấy thông tin từ ảnh
• Thị giác được dùng như nguồn thông tin
– Một hình ảnh chứa một lượng thông tin ngữ
– Hình ảnh y tế cũng chứa rất nhiều thông tin ngữ
nghĩa Thị giác máy tính có thể hữu ích cho một
chẳng hạn như chẩn đoán dựa trên hình ảnh của
các tế bào da, để quyết định xem chúng có bị
ung thư hay không
Trang 8Đối tượng của thị giác máy tính
• Là các dữ liệu hình ảnh.
– Dữ liệu hình ảnh có thể nhiều dạng, chẳng
hạn như chuỗi video, các cảnh từ camera,
hay dữ liệu đa chiều từ máy quét y học…
• Là lý thuyết đằng sau các hệ thống nhân
tạo có trích xuất các thông tin từ các hình
ảnh.
Đối tượng Thị giác máy tính
• Photo: viết tắt photograph Hình do máy
ảnh tạo ra
• Picture: hình hay bức họa Bức tranh, bức
ảnh, bứcvẽ, chân dung, hình chụp.
• Image: hình ảnh, hình tượng, tưởng tượng
trong suy nghĩ, ấn tượng Nói chung chỉ
cảm nhận về hình/ảnh.
Trang 9Ứng dụng của thị giác máy tính
• Sinh học (Biological Sciences)
ứng dụng thành công lâu đời nhất của thị giác
máy tính là nhận dạng các ký tự và số Điều này
có thể được sử dụng để đọc mã zip hoặc biển số
xe
– Rô bốt: giúp rô bốt nhận dạng mọi vật xung
quanh từ đó đưa ra các quyết định
– Xe tự lái (self-driving cars): Lái xe tự động là một
trong những ứng dụng nóng nhất của thị giác
máy tính Các công ty như Tesla, Google hoặc
General Motors cạnh tranh để trở thành người
đầu tiên xây dựng xe hoàn toàn tự lái
– Phát hiện sản phẩm lỗi trong công nghiệp
Trang 10Ứng dụng của thị giác máy tính
• Thực tế ảo VR đang sử dụng các kỹ thuật thị giác
máy tính tương tự như AR Thuật toán cần biết vị
trí của người dùng và vị trí của tất cả các đối
tượng xung quanh Khi người dùng di chuyển
xung quanh,mọi thứ cần được cập nhật một cách
thực tế và mượt mà
• Thanh toán tự động Amazon Go là một loại cửa
hàng mới không có thanh toán Với máy tínhtầm
nhìn, các thuật toán phát hiện chính xác sản phẩm
nào bạn sử dụng và chúng tính phí bạn khi bạn
bước ra khỏicửa hàng 2.
Ứng dụng của thị giác máy tính
– Hiệu ứng đặc biệt Chụp chuyển động và hình dạng là những kỹ
thuật mới được sử dụng trong các bộ phim như Avatar để tạo hoạt
ảnhký tự kỹ thuật số bằng cách ghi lại các chuyển động của một
diễn viên con người Để làm được điều đó, chúng tôi cóđể tìm vị trí
chính xác của các điểm đánh dấu trên khuôn mặt của diễn viên
trong không gian 3D, sau đó tạo lại chúng trênhình đại diện kỹ
thuật số
– Mô hình đô thị 3D Chụp ảnh bằng máy bay không người lái trên
thành phố có thể được sử dụng để kết xuất mô hình 3D củathành
phố Thị giác máy tính được sử dụng để kết hợp tất cả các bức
ảnh thành một mô hình 3D duy nhất.
– Nhận dạng cảnh Có thể nhận ra vị trí chụp ảnh Ví dụ, mộtbức ảnh
của một địa danh có thể được so sánh với hàng tỷ bức ảnh trên
google để tìm ra những điểm trùng khớp nhất chúng tôisau đó có
thể xác định kết quả phù hợp nhất và suy ra vị trí của bức ảnh.
– Nhận diện khuôn mặt Nhận diện khuôn mặt đã được sử dụng
nhiều năm trong máy ảnh để chụp ảnh đẹp hơnvà tập trung vào
các khuôn mặt Tính năng nhận diện nụ cười có thể cho phép máy
ảnh tự động chụp ảnh khi4 đối tượng đang mỉm cười.
Trang 11Computer Vision Technology
Can Better Our Lives
Inside four images, clockwise, starting from top left:
Image is CC0 1.0 public domain
Image by Tucania is licensed under CC BY-SA 3.0 ; changes made
Image by Intuitive Surgical, Inc is licensed under CC BY-SA 3.0 ; changes made
Image by Oyundari Zorigtbaatar is licensed under CC BY-SA 4.0
Outside border images, clockwise, starting from top left:
Image by Pop Culture Geek is licensed under CC BY 2.0 ; changes made
Image by the US Government is in the public domain
Image by the US Government is in the public domain
Image by Glogger is licensed under CC BY-SA 3.0 ; changes made
Image by Sylenius is licensed under CC BY 3.0 ; changes made
Image by US Government is in the public domain
Trang 12-Johnson et al., “Image Retrieval using Scene Graphs”, CVPR 2015
Figures copyright IEEE, 2015 Reproduced for educational purposes
Lecture 1
Trang 13-Cách cài đặt và chạy một chương
– Code Python ở bất cứ các Text Editor (trình
soạn thảo văn bản) Text Document hay
Notepad,
• Có thể dùng Sublime Text, VS Code…
– Viết chương trình Python một cách hiệu quả
và nhanh chóng hơn cho người mới học nên
IDEs (môi trường phát triển tích hợp)
• PyCharm, Spyder, PyDev, Atom,… thì PyCharm có
lẽ là IDE được ưa chuộng cũng như phổ biến nhất
• Cài thư viện: Windows PowerShell (Admin)>
python -m pip install opencv-python
Trang 14Cách cài đặt và chạy một chương
trình viết bằng Python
• Cách chạy một file
– Viết file dươi dạng py
– Folder >cmd hoặc powershell > python
tên_file.py
Cài đặt Jupyter Notebook
• Môi trường Anaconda; Miniconda
• Kiểm tra python đã được cài đặt
• Cài đặt Jupyter notebook
Trang 15Jupyter Notebook
• Cài đặt xong Jupyter Notebook trong các bước ở trên
• Chạy Jupyter bằng câu lệnh trong Terminal hoặc Command Prompt:
– Sau đó, trình thông dịch lệnh sẽ hiển thị ra thông báo sau
dẫn http://localhost:8888/tree như hình dưới đây:
Jupyter Notebook
Trang 16Jupyter Notebook
• 1 Tạo một notebook cơ bản
• Click vào New và chọn loại tài liệu như Python,
Text file, Folder
Jupyter Notebook
• Tên mặc định là Untitled Click vào chữ “Untitled” phía trên cũng, bên phải
logo Jupyter để tự thay đổi tên theo ý của bạn.
Trang 17Jupyter Notebook
• Ở Tab quản lý file của Jupyter, bạn sẽ thấy một file
mới có tên notebook01.ipynb với trạng thái
là Running vì notebook này đang được mở.
• Tắt một notebook bằng cách nhấn Shutdown.
Jupyter Notebook
– 1: Tiêu đề tài liệu,
– 2: Thanh menu bao gồm các menu như:
• File: các menu thao tác với file như tạo mới, lưu trữ,
save as
Trang 18Jupyter Notebook
– Edit: các menu thao tác với nội dung file như copy, paste văn bản, cell,
tìm kiếm và thay thế một nội dung trong file, chèn hình ảnh
– View: menu điều chỉnh giao diện, hiển thị hoặc ẩn các thành phần giao
diện trong Jupyter Notebook.
– Insert, Cell: các hành động liên quan đến Cell là thành phần cơ bản của
một tài liệu.
– Kernel: các thao tác với kernel hiện hành như thay đổi nếu muốn sử
dụng ngôn ngữ khác, restart, shutdown
• 3: Thanh menu nhanh (shortcut menu) bao gồm các thao tác nhanh
mà bạn thường làm với một tài liệu, có một số nút trên đó chúng ta
hay dùng nhất như:
– Save file, Copy, paste; Thay đổi thứ tự các cell trong tài liệu; Chạy code
trong tài liệu; Lựa chọn loại văn bản trong cell:
– Code: Cell này chứa mã Python và có thể thực hiện được.
– Markdown: Cell này chứa văn bản diễn giải.
• 4: Nội dung tài liệu chứa các cell có nội dung là code hoặc
markdown, đây là vùng chúng ta sẽ làm việc chính.
Câu hỏi
• Câu 1 Thị giác, thị giác máy tính là gì?
• Câu 2 Đối tượng của thị giác máy tính?
• Câu 3 Ứng dụng của thị giác máy tính?
• Câu 4 Lấy thông tin từ ảnh gồm những
loại nào? Cho ví dụ?
Trang 19Tài liệu tham khảo
• Computer Vision CS231n - Stanford University
• Hubel, David H., and Torsten N Wiesel "Receptive fields, binocular interaction and
functional architecture in the cat's visual cortex." The Journal of physiology 160.1 (1962):
106 [PDF]
• Roberts, Lawrence Gilman "Machine Perception of Three-dimensional Solids." Diss
Massachusetts Institute of Technology, 1963 [PDF]
• Marr, David "Vision.” The MIT Press, 1982 [PDF]
• Brooks, Rodney A., and Creiner, Russell and Binford, Thomas O "The ACRONYM
model-based vision system " In Proceedings of the 6th International Joint Conference on Artificial
Intelligence (1979): 105-113 [PDF]
• Fischler, Martin A., and Robert A Elschlager "The representation and matching of pictorial
structures." IEEE Transactions on Computers 22.1 (1973): 67-92 [PDF]
• Lowe, David G., "Three-dimensional object recognition from single two-dimensional
images," Artificial Intelligence, 31, 3 (1987), pp 355-395 [PDF]
• Shi, Jianbo, and Jitendra Malik "Normalized cuts and image segmentation." Pattern
Analysis and Machine Intelligence, IEEE Transactions on 22.8 (2000): 888-905 [PDF]
• Viola, Paul, and Michael Jones "Rapid object detection using a boosted cascade of simple
features." Computer Vision and Pattern Recognition, 2001 CVPR 2001 Proceedings of
the 2001 IEEE Computer Society Conference on Vol 1 IEEE, 2001
Trang 20Biến trong python
• Biến trong python
– Biến Python là một vị trí bộ nhớ dành riêng để
lưu trữ các giá trị Nói cách khác, một biến
trong chương trình python cung cấp dữ liệu
cho máy tính để xử lý.
– Mọi giá trị trong Python đều có một kiểu dữ
liệu Các kiểu dữ liệu khác nhau trong Python
là Numbers, List, Tuple, Strings, Dictionary,
v.v Các biến có thể được khai báo bằng bất
kỳ tên nào hoặc thậm chí là các bảng chữ cái
như a, aa, abc
Trang 21Số và Boolean
• Number
– Số
• Số nguyên: Trong Python, giá trị của một số
nguyên không bị giới hạn bởi số lượng bit và có
thể mở rộng đến giới hạn của bộ nhớ khả dụngSố
nổi:
• Trong Python, số có dấu phảy động được sử dụng
để biểu diễn số thực và được viết bằng dấu (.)
chia phần nguyên và phần phân số
Số và Boolean
• Boolean
– Booleans đại điện cho một trong hai giá trị
đúng hoặc sai.
Trang 22Chuỗi
• Chuỗi
– Chuỗi là Mảng (Array) Giống như nhiều ngôn
ngữ lập trình phổ biến khác, chuỗi trong
Python là các mảng byte đại diện cho các ký
tự unicode
Thập phân, phân số, Mô-đun
toán học và thống kê
• Mô-đun thập phân (decimal module)
• Mô-đun thập phân cung cấp hỗ trợ cho số học dấu
phẩy động thập phân được làm tròn chính xác
nhanh chóng
– Mô-đun phân số (fraction module)
• Một thực thể phân số có thể được xây dựng từ
một cặp số nguyên, từ một số hữu tỉ khác hoặc từ
một chuỗi Các thực thể của phân số có thể được
chia nhỏ và được coi là bất biến
Trang 23Thập phân, phân số, Mô-đun
toán học và thống kê
– Mô-đun toán học
• Mô-đun toán học Python là một tính năng quan
trọng được thiết kế để xử lý các phép toán Nó
được đóng gói với bản phát hành Python tiêu
chuẩn và đã ở đó ngay từ đầuStatistics Module
• Mô-đun thống kê cung cấp các chức năng để
thống kê toán học của dữ liệu số Các hàm thống
kê phổ biến sau đây được định nghĩa trong
mô-đun này
Thập phân, phân số, Mô-đun
toán học và thống kê
• Mô-đun toán học
Trang 24– Toán tử số học - Arithmetic Operators.
– Toán tử quan hệ - Comparison (Relational) Operators
– Toán tử gán - Assignment Operators.
– Toán tử logic - Logical Operators.
– Toán tử Biwter - Bitwise Operators.
– Toán tử khai thác - Membership Operators.
– Toán tử xác thực - Indentity Operators.
Trang 25Toán tử gán và toán tử logic
– Toán tử gán là toán tử dùng đế gán giá trị của
một đối tượng cho một đối tượng khác.
– Toán tự logic những toán tử này được áp
dụng cho kiểu luận lý (bool) Kết quả của toán
tử logic trả về true (1) hoặc false (0)
Trang 26Danh sách và tuple
• Danh sách:
– Danh sách là một kiểu dữ liệu linh hoạt nhất
có sẵn trong Python, có thể được viết dưới
dạng danh sách các giá trị (mục) được phân
tách bằng dấu phẩy giữa các dấu ngoặc
vuông Điều quan trọng về danh sách là các
mục trong danh sách không cần cùng loại.Ví
dụ:
– my_list = [1, 2, 3]
Danh sách và tuple
• Tuple:
– Tuple trong Python là một kiểu dữ liệu dùng
để lưu trữ các đối tượng không thay đổi về
sau (giống như hằng số).
– Còn lại thì cách lưu trữ của nó cũng khá giống
như kiểu dữ liệu danh sách.
– my_tuple = (1, 2, 3)
Trang 27Danh sách và tuple
Danh sách và tuple
Trang 28Mảng và ma trận
– Mảng: Mảng là một cấu trúc dữ liệu để lưu trữ
dữ liệu đồng nhất Điều đó có nghĩa là tất cả
các phần tử là cùng một loại.
• Ví dụ: arr = np.array([[1,2],[3,4]])
• Ma trận: Ma trận là một mảng dữ liệu hai chiều,
trong đó dữ liệu được sắp xếp dưới dạng hàng và
cột Các mục hàng ngang trong ma trận được gọi
Trang 29Câu lệnh điều kiện
– Câu lệnh If: Sử dụng câu lệnh if để thực thi
một khối mã Python, nếu điều kiện là đúng.
– Mọi giá trị khác 0 hoặc vùng chứa rỗng được
coi là TRUE, trong khi Giá trị 0, Không có và
vùng chứa rỗng được coi là FALSE Ví dụ :
Trang 31Câu lệnh điều kiện
• Toán tử so sánh
Vòng lặp
– Câu lệnh for in Loop: Vòng lặp for trong
Python có thể lặp qua một chuỗi các phần tử.
Cấu trúc của vòng lặp for trong Python khác
với cấu trúc trong C ++ hoặc Java.
• Ví dụ:
• # Prints all letters except 'e' and 's’
• for letter in 'geeksforgeeks’:
if letter == 'e' or letter == 's’:
continue else:
print('Current Letter :', letter)
Trang 32Vòng lặp
• Vòng lặp While: Một vòng lặp while trong
python lặp lại cho đến khi điều kiện của nó
trở thành Sai Nói cách khác, nó thực thi
các câu lệnh trong chính nó trong khi điều
Trang 33Vòng lặp
– Break trong vòng lặp: Nếu câu lệnh break nằm trong một
vòng lặp lồng nhau (vòng lặp bên trong một vòng lặp
khác), câu lệnh break sẽ kết thúc vòng lặp trong cùng.
– Continue trong vòng lặp : Câu lệnh continue được sử
dụng để bỏ qua phần còn lại của đoạn mã bên trong
vòng lặp chỉ cho lần lặp hiện tại Vòng lặp không kết thúc
nhưng tiếp tục với lần lặp tiếp theo.Thí dụ :
for val in "string":
if val == "i":
break print(val)
for val in "string":
if val == "i":
continue print(val)
2 Vòng lặp
Trang 34Iterators
• Iterator đơn giản là một đối tượng có thể được lặp
lại Nó cho phép các lập trình viên truy cập hoặc
duyệt qua tất cả các phần tử của bộ sưu tập mà
không cần hiểu sâu hơn về cấu trúc của nó
• Trình vòng lặp Python thực hiện giao thức trình
vòng lặp bao gồm hai phương thức đặc biệt iter
() và next () Phương thức iter () trả
về một đối tượng trình lặp trong đó phương thức
next () trả về phần tử tiếp theo từ chuỗi
Iterators
• Ví dụ: x=['Hey','there','Python','programmers’]
• obj = iter(x) #using iter function for x
• next(obj) #Iteration 1 # Output: 'Hey'
• next(obj) #Iteration 2 # Output: 'there'
Trang 35Khai báo hàm và đối số
– Hàm là một khối mã có tổ chức, có thể sử
dụng lại được dùng để thực hiện một hành
động nào đó.
– Hàm cung cấp mô-đun tốt hơn cho ứng dụng
của bạn và mức độ tái sử dụng mã cao.
Khai báo hàm và đối số
– Như bạn đã biết, Python cung cấp cho bạn
nhiều hàm tích hợp sẵn như print (), v.v.
nhưng bạn cũng có thể tạo các hàm của riêng
mình Các hàm này được gọi là các hàm do
Trang 36Khai báo hàm và đối số
• Các tham số và đối số từ vựng không giới hạn ở
python nhưng chúng giống nhau trên các ngôn
ngữ lập trình khác nhau
• Đối số là các giá trị được chuyển vào hàm (hoặc
phương thức) khi hàm gọiTham số là các biến (số
nhận dạng) được chỉ định trong định nghĩa hàm
(tiêu đề của)Thí dụ :
Khai báo hàm và đối số
Function Declaration Function Arguments
Trang 37Khai báo hàm và đối số
Đối số vị trí Đối số từ khóa
Khai báo hàm và đối số
Hỗn hợp đối số từ khóa và đối số vị trí Giá trị tham số mặc định
Trang 38Biến toàn cục và biến cục bộ
• Toàn cục biến trong Python được định nghĩa bên
ngoài một hàm Nó sẽ hoạt động trên toàn bộ chức
năng nếu không có biến được đặt giống nhau tên
• Các biến được định nghĩa trong một chức năng là
các cục biến.Bất kỳ bên trong mã nào trong đó
chức năng đều có thể truy cập (đọc và thay đổi)
biến này
• Bất kỳ bên ngoài mã nào nó cũng không được Nó
là địa chỉ, vì vậy nó không thể nhìn thấy từ bên
ngoài
2 Global and Local Variables
• Ví dụ
Trang 39Biến toàn cục và biến cục bộ
– Không gian tên Python có thể được chia
thành bốn loại (tiếp)
• Local Namespace : Một chức năng, vòng lặp for,
khối thử ngoại trừ là một số ví dụ về không gian
tên cục bộ Không gian tên cục bộ bị xóa khi hàm
hoặc khối mã kết thúc quá trình thực thi
• Enclosed Namespace : Khi một hàm được xác
định bên trong một hàm, nó sẽ tạo ra một không
gian tên kèm theo Vòng đời của nó cũng giống
như không gian tên cục bộ
Biến toàn cục và biến cục bộ
• Python namespaces can be divided into four types
• Không gian tên toàn cầu: nó thuộc về tập lệnh
python hoặc mô-đun hiện tại Không gian tên
chung cho một mô-đun được tạo khi định nghĩa
đun được đọc Nói chung, không gian tên
mô-đun cũng tồn tại cho đến khi trình thông dịch thoát
ra.Không gian tên dựng sẵn:
• Không gian tên dựng sẵn được tạo khi trình thông
dịch Python khởi động và nó không bao giờ bị xóa
• Phạm vi xác định thứ bậc trong đó chúng tôi tìm
kiếm một biến
Trang 40Biến toàn cục và biến cục bộ
Namespaces Error Case
Biến toàn cục và biến cục bộ
Enclosing Scope Explanation