Bài giảng Lập trình nhúng ARM-Linux - Chương 8: Lập trình xử lý ảnh trên nền nhúng
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình nhúng ARM-Linux - Chương 8: Lập trình xử lý ảnh trên nền nhúng", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_lap_trinh_nhung_arm_linux_chuong_8_lap_trinh_xu_ly.pdf
Nội dung text: Bài giảng Lập trình nhúng ARM-Linux - Chương 8: Lập trình xử lý ảnh trên nền nhúng
- Chương 8 Lập trình xử lý ảnh trên nền nhúng Lập trình nhúng ARM-Linux 202
- Nội dung . 8.1. Tổng quan về xử lý ảnh . 8.2. Giới thiệu OpenCV . 8.3. C|c phép biến đổi ảnh cơ bản Lập trình nhúng ARM-Linux 203
- 8.1. Tổng quan xử lý ảnh Khái niệm xử lý ảnh . N}ng cao chất lượng hình ảnh theo một tiêu chí n{o đó (Cảm nhận của con người) . Ph}n tích ảnh để thu được c|c thông tin đặc trưng giúp cho việc ph}n loại ảnh (image classification), nhận dạng ảnh (image recognition). . Hiểu ảnh đầu v{o để có những mô tả về ảnh ở mức cao hơn, s}u hơn. Lập trình nhúng ARM-Linux
- Mô hình hệ thống xử lý ảnh Lưu trữ Camera Thu nhận Phân tích Đối sánh Số hóa ảnh ảnh Nhận dạng Sensor Hệ quyết định Lưu trữ Lập trình nhúng ARM-Linux
- Các bài toán xử lý ảnh Các kỹ thuật tiền xử lý-mức thấp Xử lý mức cao Image Image Image Enhancement Restoration Segmentation Image Image Image Acquisition Compression Coding Representation & Description Morphological Wavelet Recognition & Image Processing Analysis Interpretation Knowledge Base Lập trình nhúng ARM-Linux
- Các bài toán xử lý ảnh . Thu nhận ảnh, số hóa ảnh (image aquisition) • Hệ thống chụp ảnh, tín hiệu ảnh • Hệ thống số hóa ảnh: C|c phương ph|p lấy mẫu, lượng tử hóa . Cải thiện ảnh, khôi phục ảnh, lọc nhiễu (tiền xử lý – image pre-processing) • C|c phép xử lý điểm ảnh • C|c phép xử lý trên miền không gian • C|c phép xử lý trên miền tần số 2 0 Lập trình nhúng ARM-Linux 7
- Các bài toán xử lý ảnh . Phân tích ảnh • Trích chọn đặc trưng (feature extraction) • Biểu diễn, mô tả ảnh (image representation, image description) • Ph}n lớp ảnh (image classification) • Nhận dạng ảnh (image recognition) • . Mã hóa, nén ảnh • C|c phương ph|p nén ảnh, c|c chuẩn nén ảnh . Truyền thông ảnh: c|c kỹ thuật streaming 2 0 Lập trình nhúng ARM-Linux 8
- Ứng dụng xử lý ảnh Lập trình nhúng ARM-Linux
- Ứng dụng tăng cường chất lượng Lập trình nhúng ARM-Linux
- Hiệu ứng panorama Lập trình nhúng ARM-Linux
- Ứng dụng nhận dạng khuôn mặt Lập trình nhúng ARM-Linux
- Nhận dạng người chuyển động Lập trình nhúng ARM-Linux
- Nhận dạng đối tượng chuyển động Lập trình nhúng ARM-Linux
- Nhận dạng chữ viết tay Lập trình nhúng ARM-Linux
- Nhận dạng vân tay Lập trình nhúng ARM-Linux
- Nhận dạng mống mắt (iris) Lập trình nhúng ARM-Linux
- Mô hình hóa 3D & AR (Augmented Reality) KINECT Lập trình nhúng ARM-Linux
- 8.2. Giới thiệu OpenCV . OpenCV: Open Computer Vision Library • Tập hợp c|c h{m C v{ một số lớp C++ giải quyết c|c b{i to|n, thuật to|n cơ bản trong xử lý ảnh • Đa nền tảng, đ~ porting được trên rất nhiều nền tảng kh|c nhau: Windows, Linux, Embedded Linux, iOS, Android Lập trình nhúng ARM-Linux
- Thư viện OpenCV Lập trình nhúng ARM-Linux
- Kiến trúc thư viện OpenCV Lập trình nhúng ARM-Linux
- Kiến trúc thư viện OpenCV . CV: chứa c|c h{m cơ bản v{ n}ng cao thực thi c|c b{i to|n thị gi|c m|y (computer vision) . ML (Machine Learning): thư viện học m|y với c|c công cụ ph}n lớp (classifier) v{ ph}n cụm (clustering). . HighGUI: c|c h{m v{o ra v{ c|c h{m lưu trữ, nạp v{ hiển thị ảnh v{ video . CXCore: chứa c|c kiểu dữ liệu cơ bản, một số thuật to|n cơ bản v{ c|c h{m vẽ, có hỗ trợ XML Lập trình nhúng ARM-Linux
- Cài đặt thư viện OpenCV . Bước 1: C{i đặt thư viện OpenCV trên m|y host (Linux Desktop) . Bước 2: Biên dịch chéo, c{i đặt thư viện OpenCV để biên dịch cho c|c ứng dụng trên KIT . Chi tiết: Xem t{i liệu hướng dẫn c{i đặt Lập trình nhúng ARM-Linux
- Tích hợp OpenCV và QT . Khai b|o trong file .pro của dự |n QT: thêm c|c dòng lệnh sau v{o cuối file .pro Lập trình nhúng ARM-Linux
- Tích hợp OpenCV và QT . Khai b|o c|c thư viện sẽ được sử dụng: để ứng dụng linh hoạt, tạo file global.h chứa include tới c|c thư viện của OpenCV Lập trình nhúng ARM-Linux
- Đọc ảnh và hiển thị • Các kiểu dữ liệu cơ bản trong OpenCV . cvArr . cvMat . IplImage . CvCapture 226 Lập trình nhúng ARM-Linux
- Đọc ảnh và hiển thị . Hàm đọc ảnh: cvLoadImage • Tham số đầu v{o: đường dẫn tới file ảnh • Tham số đầu ra: dữ liệu ảnh lưu theo kiểu dữ liệu con trỏ của IplImage . Ví dụ: IplImage* img = cvLoadImage("/home/oto.jpeg" ); Lập trình nhúng ARM-Linux
- Kết nối Camera • Hàm mở file video: . H{m mở webcam: CvCapture* capture=cvCreateCameraCapture(0) Lập trình nhúng ARM-Linux
- Kết nối Camera .Bước 1: mở kết nối với Camera mặc định CvCapture* camera = cvCreateCameraCapture(0); .Bước 2: lấy về từng Frame ảnh của camera IplImage* preImage=cvQueryFrame(camera); .Bước 3: giải phóng đối tượng camera cvReleaseCapture(&camera); Lập trình nhúng ARM-Linux 229
- 8.3. Các phép biến đổi cơ bản 8.3.1. Tìm hiểu cách thức biểu diễn ảnh 8.3.2. Biến đổi ảnh màu sang ảnh đa mức xám 8.3.3. Xây dựng phân bố Histogram của ảnh 8.3.4. Lập trình dãn độ tương phản 8.3.5. Lập trình cân bằng độ tương phản 8.3.6. Biến đổi ảnh đa mức xám sang ảnh nhị phân 230 Lập trình nhúng ARM-Linux
- 8.3.1. Cách thức biểu diễn ảnh . Khái niệm ảnh số: l{ ảnh thu được từ ảnh liên tục bằng phép lấy mẫu v{ lượng tử hóa y Gray level x pixel Original picture Digital image f(x, y) I[i, j] or I[x, y] Lập trình nhúng ARM-Linux
- Ảnh số . Một ảnh số thường được biểu diễn như một ma trận c|c điểm ảnh . Trong đó mỗi điểm ảnh có thể được biểu diễn bằng • 1 bit (ảnh nhị ph}n) • 8 bit (ảnh đa mức x|m) • 16, 24 bit (ảnh m{u) Lập trình nhúng ARM-Linux
- Cách thức biểu diễn ảnh . Ảnh màu (Color image) • Chứa thông tin màu của ảnh • Không gian màu thường sử dụng: RGB, CMYK • Ảnh RGB 3 kênh màu, mỗi kênh sử dụng 8 bit . Ảnh đa mức xám (Grayscale image) • Ảnh đa mức xám là ảnh có sự chuyển dần mức xám từ trắng sang đen. • Sử dụng 8 bit để biểu diễn mức xám . Ảnh nhị phân (Binary image) • Chỉ có hai màu đen, trắng (tương đương giá trị 1,0) Lập trình nhúng ARM-Linux 233
- 8.3.2. Chuyển ảnh màu -> đa mức xám . Sử dụng công thức: Gray scale= 0.2989*R+ 0.5870*G + 0.1140*B; Lập trình nhúng ARM-Linux 234
- Chuyển ảnh màu -> đa mức xám . Hàm chuyển ảnh màu sang ảnh đa mức xám: • Bước 1: Tạo 1 ảnh trắng (chưa có dữ liệu) định dạng ảnh đa mức xám IplImage *grayimage = cvCreateImage( cvSize( colorimg- >width, colorimg->height ), IPL_DEPTH_8U, 1 ); • Bước 2: Chuyển đổi ảnh màu sang đa mức xám cvCvtColor( img, grayimage, CV_RGB2GRAY ); Lập trình nhúng ARM-Linux 235
- Demo chuyển sang ảnh đa mức xám Lập trình nhúng ARM-Linux
- 8.3.3. Histogram . Biều đồ này đơn giản cho chúng ta biết số điểm ảnh (pixel) trong một ảnh đa mức xám có một giá trị mức xám tương ứng. . Thông số: số bins (=256 với ảnh đa mức xám) Lập trình nhúng ARM-Linux 237
- Histogram . Ảnh tối Lập trình nhúng ARM-Linux 238
- Histogram . Ảnh sáng Lập trình nhúng ARM-Linux 239
- Hàm tính Histogram . Cấu trúc CvHistogram: lưu c|c thông tin về ph}n bố Histogram của ảnh Lập trình nhúng ARM-Linux
- Hàm tính Histogram . Bước 1: Sử dụng h{m cvCreateHist khởi tạo cấu trúc CvHistogram để chuẩn bị chứa kết quả • Dims: số chiều của Histogram • Sizes: số lượng bins • Type: định dạng dữ liệu (thường sử dụng CV_HIST_ARRAY) • Ranges: Dải c|c khoảng gi| trị để tính Histogram Lập trình nhúng ARM-Linux
- Hàm tính Histogram . Bước 2: Tính Histogram sử dụng h{m cvCalcHist • Image: Ảnh cần tính Histogram • Hist: lưu kết quả tính Histogram • Accumulate: tùy chọn tích lũy, cho phép tính Histogram từ nhiều ảnh • Mask: x|c định phạm vi c|c pixel sẽ được sử dụng để tính Histogram, mặc định tính to{n ảnh Lập trình nhúng ARM-Linux
- Hàm tính Histogram . Bước 3: Vẽ ph}n bố Histogram . Bước 4: Giải phóng bộ nhớ sử dụng h{m cvClearHist Lập trình nhúng ARM-Linux
- Demo tính Histogram của ảnh Lập trình nhúng ARM-Linux
- 8.3.4. Dãn độ tương phản . Đây là một kỹ thuật tăng cường chất lượng ảnh thông dụng, nó có tác dụng làm tăng độ tương phản của ảnh bằng cách giãn dải gía trị mức xám của ảnh. Các bước thực hiện • Tìm ra giới hạn mức xám nhỏ nhất (a) và lớn nhất (b) của ảnh. Với ảnh đa mức xám thường a=0 và b=255. • Tìm giá trị mức xám nhỏ nhất (c) và lớn nhất (d) trong các điểm ảnh • Xác định giá trị mức xám mới theo công thức Lập trình nhúng ARM-Linux 245
- Dãn độ tương phản Ảnh trước và sau khi tiến hành dãn độ tương phản Lập trình nhúng ARM-Linux 246
- 8.3.5. Cân bằng Histogram . Cân bằng histogram là một phương pháp thay đổi độ tương phản của ảnh bằng cách thay đổi lược đồ phân bố mức xám của chúng. . Mục đích làm thay đổi biểu đồ phân bố mức xám từ phân bố ban đầu sang sự phân bố hướng tới đều. . Tác dụng nhằm phát hiện những đối tượng bi che khuất trong ảnh ban đầu. Phép biến đổi này rất có ý nghĩa đối với những bức ảnh chụp trong bóng đêm, đối tượng thường bị mờ, hay bị che khuất bởi bóng tối, áp dụng cân bằng histogram có thể làm nổi rõ đối tượng hơn. Lập trình nhúng ARM-Linux 247
- Cân bằng Histogram . Công thức thực hiện: bk = (bmax – bmin) . Trong đó bmin, bmax là những giá trị được chọn, pi là xác suất xuất hiện giá trị mức xám i trong ảnh ban đầu, với i [amin, amax] Lập trình nhúng ARM-Linux 248
- Hàm cân bằng Histogram . Sử dụng h{m cvEqualizeHist • Src: ma trận ảnh gốc • Dst: ma trận ảnh sau khi đ~ c}n bằng Histogram Lập trình nhúng ARM-Linux
- Demo cân bằng Histogram Lập trình nhúng ARM-Linux
- 8.3.6. Chuyển sang ảnh nhị phân . Chuyển đổi dựa trên phân ngưỡng • Phân ngưỡng cố định (fixed threshold): sử dụng khi Histogram phân bố rõ ràng hai vùng sáng, tối với hai đỉnh rõ rệt Lập trình nhúng ARM-Linux 251
- Chuyển sang ảnh nhị phân . Phân ngưỡng thích nghi (adaptive threshold) • Trong trường hợp lược đồ mức xám của ảnh có tới >=3 đỉnh chóp, ví dụ trong ảnh dưới đây tương ứng với số điểm ảnh có giá trị mức xám tương ứng là 50, 110 và 180. Lập trình nhúng ARM-Linux 252
- Chuyển sang ảnh nhị phân . Phân ngưỡng thích nghi: • Sử dụng ngưỡng động cho các điểm ảnh khác nhau • Kỹ thuật này cho phép chúng ta có thể điều tiết, thích nghi với sự thay đổi về điều kiện sáng của ảnh ví dụ như ảnh có sử dụng các hiệu ứng rọi sáng (illumination) hay đổ bóng(shadow). Lập trình nhúng ARM-Linux 253
- Chuyển sang ảnh nhị phân Kết quả Kết quả (Sử dụng ngưỡng cứng) (Sử dụng ngưỡng thích nghi) Lập trình nhúng ARM-Linux 254
- Hàm chuyển sang ảnh nhị phân . Phân ngưỡng cứng • Src: Ảnh ban đầu, dst: ảnh kết quả • Threshold: ngưỡng được chọn • maxValue: gi| trị lớn nhất • thresholdType: kiểu ph}n ngưỡng Lập trình nhúng ARM-Linux
- Hàm chuyển sang ảnh nhị phân . Phân ngưỡng thích nghi • Src: ảnh ban đầu, dst: ảnh kết quả • maxValue: gi| trị lớn nhất • adaptiveMethod: phương ph|p tính ngưỡng thích nghi (CV_ADAPTIVE_THRESH_MEAN_C hay CV_ADAPTIVE_THRESH_GAUSSIAN_C) Lập trình nhúng ARM-Linux
- Demo chuyển sang ảnh nhị phân Lập trình nhúng ARM-Linux
- Phụ lục A – Các lệnh Linux . Lệnh hiển thị thông tin c|c file trong thư mục ls –al //hiển thị danh s|ch với đầy đủ thông tin . Lệnh thay đổi quyền cho một file hay thư mục chmod vd: chmod +x Filename //Cấp thêm quyền thực thi . Lệnh để xem danh s|ch c|c file thiết bị ls –al /dev . Lệnh để xem tất cả c|c tiến trình đang chạy ps Lập trình nhúng ARM-Linux 258
- Phụ lục A – Các lệnh Linux . Lệnh c{i đặt một phần mềm từ kho chứa của Linux sudo apt-get install Tên_gói_phần_mềm . Xem danh s|ch c|c major id tương ứng với c|c device driver đang active cat /proc/devices . Tìm kiếm file chứa một dòng text bất kỳ grep vd: grep –r “Hello” . //Tìm tất cả c|c file v{ hiển thị ra c|c dòng chứa từ khóa //Hello trong thư mục hiện tại v{ c|c thư mục con Lập trình nhúng ARM-Linux 259
- Phụ lục B – Website quan trọng . //download . //mua KIT, download t{i liệu . //forum chia sẻ . //Tin tức công nghệ . //download mã kernel . //Hỗ trợ QT SDK . qtforum.org . qtcenter.org Lập trình nhúng ARM-Linux 260