1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo học phần nhập môn xử lý ảnh Đề tài tìm hiểu về thuật toán phát hiện cạnh canny

29 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 29
Dung lượng 5,02 MB

Nội dung

LỜI MỞ ĐẦU Trong sự phát triển của các phương pháp xử lý hình ảnh hiện đại, việc sử dụngcác bộ lọc để phát hiện biên ảnh trở thành một công cụ không thể thiếu trong nhiềuứng dụng khác nh

Trang 1

TRƯỜNG ĐẠI HỌC ĐIỆN LỰC

KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO HỌC PHẦN NHẬP MÔN XỬ LÝ ẢNH

ĐỀ TÀI :

TÌM HIỂU VỀ THUẬT TOÁN PHÁT HIỆN CẠNH CANNY

Sinh viên thực hiện : TẠ QUỐC TÙNG

Giảng viên hướng dẫn : NGUYỄN THỊ THANH TÂN Ngành : CÔNG NGHỆ THÔNG TIN

Hà Nội, tháng 8 năm 2024

Trang 3

MỤC LỤC

LỜI CẢM ƠN

LỜI MỞ ĐẦU

CHƯƠNG 1 TỔNG QUAN VỀ XỬ LÝ ẢNH 1

1.1 Tổng quan về xử lý ảnh 1

1.2 Giới thiệu OpenCV 2

1.3 C++ và OpenCV 3

CHƯƠNG II THUẬT TOÁN PHÁT HIỆN CẠNH CANNY 4

2.1 Thuật toán phát hiện cạnh Canny 4

2.2.Các bước thực hiện thuật toán phát hiện cạnh Canny 6

2.2.1.Giảm nhiễu 6

2.2.2 Tính toán Gradient độ xám 7

2.2.3 Lọc bằng phương pháp non-maximum suppression 9

2.2.4 Ngưỡng kép (Double threshold) 12

2.2.5 Theo dõi cạnh theo độ trễ (Edge Tracking by Hysteresis) 13

CHƯƠNG 3: SỬ DỤNG OPENCV ĐỂ PHÁT HIỆN CẠNH BẰNG THUẬT TOÁN CANNY 15

3.1 Cài đặt OpenCV 15

3.2 Chạy chương trình 20

3.2.1 Thư viện cần thiết 20

3.2.2 Hàm main 20

Trang 4

Chúng em xin chân thành cảm ơn!

Trang 5

LỜI MỞ ĐẦU

Trong sự phát triển của các phương pháp xử lý hình ảnh hiện đại, việc sử dụngcác bộ lọc để phát hiện biên ảnh trở thành một công cụ không thể thiếu trong nhiềuứng dụng khác nhau, từ phân tích y tế, nhận diện khuôn mặt đến công nghệ thị giácmáy tính Trong số các phương pháp phát hiện biên ảnh, bộ lọc Canny nổi bật nhờkhả năng phát hiện chính xác các đường biên trong hình ảnh, đồng thời loại bỏnhiễu hiệu quả Bộ lọc này không chỉ đơn thuần là một công cụ kỹ thuật mà còn làyếu tố quyết định trong việc cải thiện chất lượng và độ chính xác của các hệ thống

xử lý hình ảnh Ngày nay, ứng dụng bộ lọc Canny không chỉ phổ biến trong lĩnhvực nghiên cứu mà còn được triển khai rộng rãi trong nhiều lĩnh vực công nghiệp

và thương mại, góp phần vào sự phát triển mạnh mẽ của công nghệ thị giác máytính Việc sử dụng bộ lọc Canny để tìm biên ảnh đã trở thành một giải pháp hiệuquả, giúp tối ưu hóa quy trình xử lý hình ảnh và đáp ứng nhanh chóng các yêu cầuphức tạp của cuộc sống hiện đại

Trang 6

CHƯƠNG 1 TỔNG QUAN VỀ XỬ LÝ ẢNH 1.1 Tổng quan về xử lý ảnh

Xử lý ảnh là một lĩnh vực quan trọng trong công nghệ thông tin và kỹ thuật

số, liên quan đến việc thao tác và phân tích hình ảnh để trích xuất thông tin, cảithiện chất lượng, hoặc thực hiện các chức năng cụ thể như nhận dạng, phát hiện, vàtheo dõi đối tượng Ngành này đã phát triển mạnh mẽ nhờ vào sự tiến bộ của phầncứng máy tính, các thuật toán, và trí tuệ nhân tạo

Xử lý ảnh bao gồm nhiều bước, bắt đầu từ thu thập và tiền xử lý dữ liệu hìnhảnh để loại bỏ nhiễu, cân bằng sáng, và chuẩn hóa màu sắc Sau đó, các kỹ thuậtnhư biến đổi Fourier, lọc không gian, và phân tích tần số có thể được áp dụng đểtrích xuất các đặc điểm quan trọng từ hình ảnh Một số kỹ thuật phổ biến trong xử

lý ảnh bao gồm:

- Phát hiện biên: Nhận diện các cạnh hoặc đường ranh giới trong hình ảnh

để xác định đối tượng hoặc khu vực quan tâm Các bộ lọc như Sobel,Canny thường được sử dụng để phát hiện biên

- Phân đoạn ảnh: Chia hình ảnh thành các vùng nhỏ dựa trên các đặc tínhnhư màu sắc, độ sáng hoặc kết cấu Phân đoạn là bước cơ bản trong việcnhận diện đối tượng hoặc phân loại hình ảnh

- Nâng cao chất lượng hình ảnh: Các kỹ thuật như tăng cường độ sáng,tương phản, và giảm nhiễu giúp cải thiện chất lượng hình ảnh, làm cho

Trang 7

- Nén ảnh: Giảm kích thước tệp ảnh để tiết kiệm dung lượng lưu trữ và băngthông truyền tải mà không làm mất quá nhiều chất lượng hình ảnh Cácphương pháp nén như JPEG và PNG là những tiêu chuẩn phổ biến.

1.2 Giới thiệu OpenCV

OpenCV (Open Source Computer Vision Library) là một thư viện mã nguồn

mở, được thiết kế dành riêng cho các ứng dụng thị giác máy tính và xử lý ảnh.OpenCV được phát triển bởi Intel vào cuối những năm 1990 và đã trở thành mộttrong những thư viện phổ biến nhất trong lĩnh vực này.Trong các ứng dụng sử dụng.NET Framework, mã nguồn chương trình (C#, VB.NET) được biên dịch thành mãngôn ngữ trung gian MSIL (Microsoft intermediate language)

Một số đặc điểm nổi bật của OpenCV bao gồm:

- Đa nền tảng: OpenCV có thể chạy trên nhiều hệ điều hành khác nhau nhưWindows, macOS, Linux, Android và iOS

- Hỗ trợ nhiều ngôn ngữ lập trình: OpenCV hỗ trợ C++, Python, Java, vàMATLAB, giúp dễ dàng tích hợp vào các dự án hiện có

- Thư viện phong phú: OpenCV cung cấp hàng ngàn hàm và thuật toán xử

lý ảnh, từ các tác vụ cơ bản như đọc và ghi ảnh, lọc, phát hiện biên, đếncác tác vụ phức tạp hơn như nhận dạng khuôn mặt, theo dõi đối tượng, vàthị giác 3D

- Hiệu suất cao: Được tối ưu hóa để tận dụng các kiến trúc phần cứng hiệnđại, OpenCV có khả năng xử lý ảnh và video với tốc độ cao, phù hợp cho

cả các ứng dụng thời gian thực

2

Trang 8

Sự kết hợp này đã được ứng dụng rộng rãi trong các ngành công nghiệp như

ô tô (hệ thống lái tự động), y tế (chẩn đoán hình ảnh), an ninh (giám sát video), vànhiều lĩnh vực khác, nơi xử lý ảnh và thị giác máy tính đóng vai trò quan trọngtrong việc tự động hóa và nâng cao hiệu quả công việc

Trang 9

CHƯƠNG II THUẬT TOÁN PHÁT HIỆN CẠNH CANNY

2.1 Thuật toán phát hiện cạnh Canny.

Khi nói đến nhận diện hình ảnh, mắt người chỉ mất vài phần nghìn giây để

xử lý và xác định nội dung của một bức ảnh Khả năng đáng kinh ngạc này có thểđược thực hiện dù dữ liệu là tranh vẽ hay ảnh chụp Đây cũng là mục đích hướngtới của thị giác máy tính Một trong những ý tưởng ngày nay là xây dựng một thuậttoán có thể phác thảo các cạnh của bất kỳ đối tượng nào có trên một hình ảnh, sửdụng thuật toán phát hiện cạnh Canny (Canny edge detection)

Thuật toán phát hiện cạnh Canny bao gồm 5 bước:

- Giảm nhiễu

- Tính toán Gradient độ xám của ảnh;

- Áp dụng Non-maximum suppression;

- Ngưỡng kép (Double threshold);

- Theo dõi cạnh bằng độ trễ (Edge Tracking by Hysteresis)

Sau khi áp dụng các bước này, ta có thể nhận được kết quả sau:

4

Trang 10

Hình ảnh gốc ở bên trái – Hình ảnh đã xử lý ở bên phải

Một điều quan trọng cuối cùng cần đề cập, đó là thuật toán dựa trên ảnh xám

Do đó, điều kiện tiên quyết là phải chuyển hình ảnh sang thang độ xám trước khithực hiện các bước nêu trên

Trang 11

2.2.Các bước thực hiện thuật toán phát hiện cạnh Canny

Phương trình cho một kernel bộ lọc Gaussian có kích thước (2k + 1) × (2k + 1):

Sau khi áp dụng hiệu ứng mờ Gaussian, ta nhận được kết quả sau:

Hình ảnh gốc (trái) – Hình ảnh bị làm mờ với bộ lọc Gaussian (sigma = 1.4 và kíchthước kernel là 5×5)

6

Trang 12

2.2.2 Tính toán Gradient độ xám

Bước tính toán Gradient độ xám phát hiện các cạnh thông qua cường độ vàhướng của gradient độ xám

Các cạnh tương ứng với sự thay đổi cường độ sáng của pixel Để phát hiện

nó, cách dễ nhất là áp dụng các Filter làm nổi bật sự thay đổi cường độ này theo cảhai hướng: ngang (x) và dọc (y)

Sau Khi hình ảnh được làm mịn, các đạo hàm Ix và Iy w.r.t x và y được tính.Việc này có thể được thực hiện bằng cách nhân chập I với các Sobel kernel Kx và

Trang 13

Hình ảnh bị mờ (trái) – Cường độ gradient (phải)

Kết quả gần như là mong đợi, nhưng chúng ta có thể thấy rằng một số cạnh dày và một số cạnh mỏng Bước non-maximum suppression sẽ giúp ta giảm thiểu các cạnh dày

Hơn nữa, mức cường độ gradient nằm trong khoảng từ 0 đến 255 nên độ sáng của các cạnh không đồng nhất Các cạnh trên kết quả cuối cùng phải có cùng cường độ (i-e Pixel trắng = 255)

8

Trang 14

2.2.3 Lọc bằng phương pháp non-maximum suppression

Tốt nhất, hình ảnh cuối cùng nên có các cạnh mỏng Vì vậy, ta phải thực hiệnthuật toán Non-maximum suppression để làm mỏng chúng

Nguyên tắc rất đơn giản: thuật toán đi qua tất cả các điểm trên ma trận cường

độ gradient và tìm các pixel có giá trị lớn nhất theo các hướng cạnh

Lấy một ví dụ:

Hộp màu đỏ ở góc trên bên trái đại diện cho một pixel cường độ của ma trậnCường độ Gradient đang được xử lý Hướng gradient tương ứng được biểu diễnbằng mũi tên màu cam với góc -pi radian (+/- 180 độ)

Trang 15

Hướng gradient là đường chấm màu cam (nằm ngang từ trái sang phải) Mụcđích của thuật toán là để kiểm tra xem các pixel trên cùng một hướng có cường độcao hơn hay thấp hơn các pixel đang được xử lý Trong ví dụ trên, pixel (i, j) đangđược xử lý và các pixel trên cùng một hướng được đánh dấu bằng màu xanh lam (i,j-1) và (i, j + 1) Nếu một trong hai pixel đó có cường độ cao hơn pixel đang được

xử lý, thì chỉ có một pixel có cường độ cao hơn được giữ lại Pixel (i, j-1) có vẻsáng hơn, vì nó có màu trắng (giá trị 255) Do đó, giá trị cường độ của pixel hiệntại (i, j) được đặt thành 0 Nếu không có pixel nào ở hướng cạnh có giá trị cường độcao hơn thì giá trị của pixel hiện tại được giữ nguyên

Bây giờ chúng ta hãy tập trung vào một ví dụ khác:

Trong trường hợp này, hướng là đường chéo chấm màu cam Do đó, pixelcường độ cao nhất theo hướng này là pixel (i-1, j + 1)

10

Trang 16

Tóm gọn lại, mỗi pixel được đánh giá bằng 2 tiêu chí chính (hướng cạnh tínhbằng radian và cường độ pixel (từ 0–255) Dựa trên các đầu vào này, các bước non-maximum suppression là:

- Tạo một ma trận được khởi tạo bằng 0 có cùng kích thước của ma trậncường độ gradient ban đầu

- Xác định hướng của gradient dựa trên giá trị góc từ ma trận góc;

- Kiểm tra xem pixel ở cùng một hướng có cường độ cao hơn pixel hiện đangđược xử lý hay không

-Trả lại hình ảnh được xử lý bằng thuật toán non-maximum suppression

Trang 17

sáng hơn những pixel khác và điều này sẽ được khắc phục bằng hai bước cuốicùng.

2.2.4 Ngưỡng kép (Double threshold)

Bước này nhằm mục đích xác định 3 loại pixel: mạnh, yếu và ngoại lai:

- Pixel mạnh là pixel có cường độ cao và trực tiếp góp phần vào sự hìnhthành cạnh

- Pixel yếu là pixel có giá trị cường độ không đủ để được coi là mạnhnhưng chưa đủ nhỏ để được coi là ngoại lai

- Các pixel khác được coi là ngoại lai

Bây giờ bạn có thể thấy vai trò của ngưỡng kép:

- Ngưỡng cao được sử dụng để xác định các pixel mạnh (cường độ cao hơnngưỡng cao)

- Ngưỡng thấp được sử dụng để xác định các pixel ngoại lai (cường độ thấphơn ngưỡng thấp)

- Tất cả các điểm ảnh có cường độ giữa cả hai ngưỡng đều được gắn là yếu

Cơ chế Độ trễ (bước tiếp theo) sẽ giúp ta xác định xem các Pixel yếu sẽđược giữ lại như các pixel mạnh hay bị loại bỏ như pixel ngoại lai.Kết quả của bước này là một hình ảnh chỉ có 2 giá trị cường độ pixel (mạnh

và yếu):

12

Trang 18

Hình ảnh trước non-maximum suppression (trái) – Kết quả (phải): pixel yếu

có màu xám và pixel mạnh có màu trắng

2.2.5 Theo dõi cạnh theo độ trễ (Edge Tracking by Hysteresis)

Dựa trên kết quả sau khi áp dụng ngưỡng, Hysteresis Tracking chuyển đổicác pixel yếu thành mạnh, khi và chỉ khi ít nhất một trong các pixel xung quanhpixel đang xét là pixel mạnh, các pixel yếu còn lại bị loại bỏ, như được mô tả bêndưới:

Trang 19

Kết quả của quá trình

14

Trang 20

CHƯƠNG 3: SỬ DỤNG OPENCV ĐỂ PHÁT HIỆN CẠNH BẰNG THUẬT

TOÁN CANNY 3.1 Cài đặt OpenCV

Để cài đặt OpenCV vào Microsoft Visual Studio và thiết lập môi trường

để phát triển ứng dụng C++ với OpenCV, bạn có thể làm theo các bước sau:

Bước 1: Tải và cài đặt OpenCV

Tải OpenCV:

- Truy cập trang chủ của OpenCV: OpenCV Releases

- Tải phiên bản OpenCV mới nhất dành cho Windows

Trang 21

Bước 2: Cài đặt Microsoft Visual Studio

Tải Visual Studio:

- Truy cập Microsoft Visual Studio và tải phiên bản Visual Studio(Community, Professional, hoặc Enterprise)

Cài đặt Visual Studio:

- Khi cài đặt, hãy đảm bảo rằng bạn đã chọn: Desktop development with C++: Đảm bảo cài đặt tất cả các công cụ cần thiết để phát triển ứng dụng

C++

Bước 3: Thiết lập dự án trong Visual Studio

Tạo dự án mới:

16

Trang 22

- Mở Visual Studio và tạo một dự án C++ mới bằng cách chọn Create anew project.

- Chọn Console App (hoặc Empty Project nếu bạn không muốn mẫu mãnào sẵn) và đặt tên cho dự án

Thiết lập các đường dẫn trong dự án:

- Nhấp chuột phải vào tên dự án trong Solution Explorer và chọnProperties

a Thiết lập Include Directories:

Đi tới C/C++ -> General -> Additional Include Directories

Thêm đường dẫn đến thư mục include của OpenCV, ví dụ: C:\opencv\build\include

b Thiết lập Library Directories:

Trang 23

c Thiết lập Linker Input:

Đi tới Linker -> Input -> Additional Dependencies

Thêm tên các tệp .lib của OpenCV mà bạn cần sử dụng (ví dụ:opencv_world480.lib) Đảm bảo rằng bạn chọn đúng tệp lib cho cấu hìnhDebug hoặc Release

Bước 4: Thiết lập các biến môi trường

18

Trang 24

Copy 2 file: opencv_world420d.dll và opencv_world420.dll

Dán 2 file vừa copy vào đường dẫn C:\Windows\System32

Trang 25

3.2 Chạy chương trình

3.2.1 Thư viện cần thiết

20

Trang 26

Thư viện cần thiết:

opencv2/core.hpp: Chứa các lớp cơ bản và hàm cho xử lý ảnh cơ bản.opencv2/imgcodecs.hpp: Cung cấp các hàm để đọc và ghi ảnh

opencv2/highgui.hpp: Cung cấp các hàm để hiển thị ảnh và tương tác với người dùng

opencv2/opencv.hpp: Bao gồm tất cả các thành phần của OpenCV

iostream: Để sử dụng các luồng nhập/xuất chuẩn của C++

Trang 27

Làm mờ ảnh: Sử dụng bộ lọc Gaussian để làm mờ ảnh xám Điều này giúp giảmnhiễu và làm cho việc phát hiện cạnh chính xác hơn Size(9, 9) xác định kích thướccủa bộ lọc và 2 là độ lệch chuẩn của bộ lọc Gaussian.

Phát hiện cạnh với ngưỡng đầu tiên:

- t1 = 30 và t2 = 200 là các giá trị ngưỡng thấp và cao cho thuật toán Canny

- Canny(gray, dst1, t1, t2, 3, false);: Hàm Canny thực hiện việc phát hiện cạnh Cáctham số:

+ gray: Ảnh đầu vào

+ dst1: Ảnh đầu ra chứa các cạnh được phát hiện

+ t1: Ngưỡng thấp

+ t2: Ngưỡng cao

+ 3: Kích thước của bộ lọc Sobel (cũng là một tham số của hàm Canny)

+ false: Không sử dụng thuật toán Canny với phương pháp Aperture

Phát hiện cạnh với ngưỡng thứ hai:

t1 và t2 được đặt lại với các giá trị khác để thực hiện phát hiện cạnh với cácngưỡng khác

22

Trang 28

Hiển thị kết quả phát hiện cạnh: Sử dụng hàm imshow để hiển thị hai kết quả pháthiện cạnh với các ngưỡng khác nhau.

Chờ người dùng nhấn phím: Hàm waitKey(0) dừng chương trình và chờ ngườidùng nhấn phím để tiếp tục Tham số 0 có nghĩa là chờ vô thời hạn

Kết quả:

Trang 29

TÀI LIỆU THAM KHẢO

1 OpenCV Bootcamp

2 OpenCV-Python Tutorials

24

Ngày đăng: 26/12/2024, 17:05

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN