Phân đoạn ảnh dựa trên thuật toán nở vùng

79 126 0
Phân đoạn ảnh dựa trên thuật toán nở vùng

Đ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

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC DÂN LẬP HẢI PHÒNG - ISO 9001:2015 ĐỒ ÁN TỐT NGHIỆP NGÀNH: CÔNG NGHỆ THÔNG TIN Sinh viên : Nguyễn Đình Phúc Giảng viên hướng dẫn: TS Ngơ Trường Giang HẢI PHỊNG - 2018 Phân đoạn ảnh dựa thuật toán nở vùng BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC DÂN LẬP HẢI PHÒNG - PHÂN ĐOẠN ẢNH ĐỰA TRÊN THUẬT TOÁN NỞ VÙNG ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY NGÀNH: CƠNG NGHỆ THƠNG TIN Sinh viên : Nguyễn Đình Phúc Giảng viên hướng dẫn : TS Ngơ Trường Giang HẢI PHỊNG - 2018 Nguyễn Đình Phúc _ CT1701 Phân đoạn ảnh dựa thuật toán nở vùng BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC DÂN LẬP HẢI PHÒNG NHIỆM VỤ ĐỀ TÀI TỐT NGHIỆP Sinh viên: Nguyễn Đình Phúc Lớp: CT1701 Mã SV: 1112401048 Ngành: Công nghệ thông tin Tên đề tài: Phân đoạn ảnh dựa thuật toán nở vùng Nguyễn Đình Phúc _ CT1701 Phân đoạn ảnh dựa thuật toán nở vùng LỜI CẢM ƠN Trước hết em xin cảm ơn thầy cô giáo khoa Công nghệ thông tin – Trường đại học Dân Lập Hải Phòng tạo điều kiện thuận lợi cho em trình học tập trường Đặc biệt, em xin chân thành cảm ơn hướng dẫn tận tình TS Ngơ Trường Giang – giảng viên khoa Công nghệ thông tin trường Đại học Dân Lập Hải Phòng tạo điều kiện giúp đỡ em hoàn thành đồ án Mặc dù cố gắng tận tâm thầy giáo hướng dẫn xong trình độ hạn chế, nội dung đề tài mẻ với em nên khó tránh khỏi sai sót q trình tiếp nhận kiến thức Em mong dẫn thầy cô góp ý bạn bè để em hồn thiện đồ án em Cuối em xin gửi lời cảm ơn đặc biệt tới gia đình, bố, mẹ, người động viên, khích lệ để giúp em hoàn thành đồ án Em mong nhận góp ý thầy giáo bạn sinh viên để đề tài em hoàn thiện Em xin chân thành cảm ơn! Hải Phòng, ngày 26 tháng năm 2018 Người thực Nguyễn Đình Phúc Nguyễn Đình Phúc _ CT1701 Phân đoạn ảnh dựa thuật toán nở vùng MỤC LỤC LỜI CẢM ƠN MỤC LỤC DANH MỤC HÌNH ẢNH CHƯƠNG 1: MỘT SỐ VẤN ĐỀ CƠ BẢN TRONG XỬ LÝ ẢNH 1.1 Một số khái niệm 1.1.1 Khái niệm ảnh số 1.1.2 Tổng quan hệ thống xử lý ảnh 10 1.2 Kỹ thuật lọc nhiễu xử lý ảnh 11 1.2.1 Nhân chập 11 1.2.2 Lọc số gì? 13 1.2.3 Một số kỹ thuật lọc nhiễu 14 1.3 Kỹ thuật tìm biên xử lý ảnh 17 1.3.1 Một số khái niệm 17 1.3.2 Các phương pháp phát biên 17 1.4 Biến đổi khoảng cách 20 1.4.1 Giới thiệu 20 1.4.2 Thuật toán biến đổi khoảng cách đơn giản 20 1.5 Phân đoạn ảnh 21 1.5.1 Giới thiệu 21 1.5.2 Một số hướng tiếp cận phân đoạn ảnh 22 1.5.3 Phân đoạn dựa ngưỡng 26 CHƯƠNG 2: PHÂN ĐOẠN ẢNH VỚI THUẬT TOÁN NỞ VÙNG 29 2.1 Thuật toán nở vùng 29 2.2 Một số thuật toán nở vùng 29 2.2.1 Thuật toán nở vùng 29 2.2.2 Thuật toán nở vùng thống kê 30 2.2.3 Thuật toán nở vùng theo lưu vực 30 2.3 Phân đoạn ảnh theo biến đổi Watershed 31 Nguyễn Đình Phúc _ CT1701 Phân đoạn ảnh dựa thuật toán nở vùng 2.3.1 Giới thiệu: 31 2.3.2 Thuật toán watershed dựa thành phần liên thông 35 CHƯƠNG 3: THỰC NGHIỆM 47 3.1 Phát biểu toán ứng dụng .47 3.2 Khái quát thư viện OpenCV 48 3.3 Các bước thực 48 3.3.1 Bước 1: Tiền xử lý 49 3.3.2 Bước 2: Tách đối tượng 54 3.3.3 Xác định ranh giới đối tượng 56 KẾT LUẬN 59 MỘT SỐ TÀI LIỆU THAM KHẢO 60 Nguyễn Đình Phúc _ CT1701 Phân đoạn ảnh dựa thuật toán nở vùng DANH MỤC HÌNH ẢNH Hì Hì nh nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Hì nh Nguyễn Đình Phúc _ CT1701 Phân đoạn ảnh dựa thuật tốn nở vùng Hình 3-10 Số lượng đồng xu đếm Nguyễn Đình Phúc _ CT1701 58 Phân đoạn ảnh dựa thuật toán nở vùng CHƯƠNG 1: MỘT SỐ VẤN ĐỀ CƠ BẢN TRONG XỬ LÝ ẢNH 1.1 Một số khái niệm 1.1.1 Khái niệm ảnh số Ảnh số tập hợp hữu hạn điểm ảnh với mức xám phù hợp dùng để mô tả gần với ảnh thật Số điểm ảnh xác định độ phân giải ảnh, độ phân giải cao thể rõ nét đặc điểm hình, làm cho ảnh trở nên thực sắc nét Điểm ảnh phần tử ảnh số tọa độ (x, y) với độ xám màu định Kích thước khoảng cách điểm ảnh chọn thích hợp cho mắt người cảm nhận liên tục không gian mức xám (hoặc màu) ảnh số gần ảnh thật Mỗi phần tử ma trận gọi phần tử ảnh Mức xám kết biến đổi tương ứng giá trị độ sáng điểm ảnh với giá trị ngun dương Thơng thường xác định khoảng từ đến 255 tùy thuộc vào giá trị mà điểm ảnh biểu diễn Độ phân giải ảnh mật độ điểm ảnh ấn định ảnh số hiển thị Như trình bày trên, khoảng cách điểm ảnh phải chọn cho mắt người thấy liên tục ảnh Việc lựa chọn khoảng cách thích hợp tạo nên mật độ phân bổ, độ phân giải phân bố theo trục x y không gian hai chiều Ảnh đen trắng ảnh bao gồm màu: màu đen màu trắng Người ta phân mức đen trắng thành L mức Nếu sử dụng số bit B để mã hóa mức Nguyễn Đình Phúc _ CT1701 Phân đoạn ảnh dựa thuật toán nở vùng B đen trắng (hay mức xám) L xác định: L  Nếu B=1, có mức: mức mức 1, gọi ảnh nhị phân Mức ứng với màu sáng, mức ứng với màu tối Nói cách khác, với ảnh nhị phân điểm ảnh mã hóa bit Nếu L lớn ta có ảnh đa cấp xám Nếu dùng bit để biểu diễn mức xám, số mức xám biểu diễn 256 Mỗi mức xám biểu diễn dạng số nguyên nằm khoảng từ đến Nguyễn Đình Phúc _ CT1701 10 giới đối tượng đồng xu đè chồng lên cách sử dụng hàm biến đổi khoảng cách Distance transform thuật tốn Watershed Hình 3-2 Giao diện chương trình cài đặt 3.3.1 Bước 1: Tiền xử lý Bước gồm có thao tác cần thực hiện: Lọc nhiễu phân ngưỡng Đọc ảnh (Input Image) : Ta có ảnh đầu vào đọc hàm Imread có sẵn thư viện OpenCV Hàm Imread hàm dùng để đọc hình ảnh từ file với đối số truyền vào input đầu vào chứa tên file, đối số thứ hai biến định cách mà OpenCV load hình Cấu trúc hàm imread thư viện OpenCV trình bày sau: Mat image; Image=imread (INPUT, CV_LOAD_IMAGE_COLOR) ; Trong đó:  INPUT file ảnh đầu vào cần đọc  CV_LOAD_IMAGE_COLOR: Hình ảnh load lên định dạng kênh màu RBG (Red, Green, Blue)  CV_LOAD_IMAGE_GRAYSCALE: Hình ảnh load lên dạnh hình ảnh xám   CV_LOAD_IMAGE_UNCHANGED: Hình ảnh load lên giữ nguyên cấu trúc Mat cấu trúc dùng để lưu giữ data hình ảnh sử dụng OpenCV Sau load ảnh hàm Imread ta có hình ảnh 3-4: Hình 3-3 Hình ảnh đầu vào Lọc nhiễu: Sau có ảnh đầu vào, thao tác cần thực bước tiền xử lý lọc nhiễu cho ảnh đầu vào Mục đích thao tác lọc nhiễu để loại bỏ số loại nhiễu không cần thiết ảnh hưởng đến q trình tìm kiếm đối tượng sau Để thực thao tác lọc nhiễu, ta cần chuyển hình ảnh đầu vào từ ảnh màu qua ảnh xám để áp dụng số kỹ thuật lọc: Trong OpenCV sử dụng hàm CvtColor để thực chuyển ảnh đầu vào từ ảnh màu qua ảnh xám Cấu trúc hàm CvtColor OpenCV trình bày sau: Mat bw; CvtColor (src, bw, CV_BGR2GRAY) ; Trong đó:  src đối số đầu vào  bw đối số đầu  CV_BGR2GRAY code quy định chuyển đổi từ mã màu sang mã màu Ở ta thực việc chuyển đổi từ mã ảnh màu sang ảnh xám Sau chuyển đổi hệ màu ảnh gốc sang ảnh xám hàm CvtColor OpenCV ta có hình ảnh 3-4: Hình 3-4 Ảnh xám sau chuyển đổi Thao tác cần thực lọc nhiễu cho ảnh Để lọc nhiễu cho ảnh này, đồ án sử dụng lọc làm mờ Blur Là phép lọc làm cho trơn ảnh khử nhiễu hạt lọc trung bình Trong OpenCV hàm Blur trình bày sau: blur (src, dst, Size ksize, (-1, -1) , 4) Trong đó:  src ảnh đầu vào  dst ảnh sau thực phép lọc  ksize kích thước ma trận lọc   (-1, -1) giá trị mặc định ma trận lọc giá trị giá trị mặc định dùng để ước lượng chỉnh điểm ảnh phép lọc chúng vượt khỏi giới hạn ảnh Sau thực lọc ảnh hàm Blur OpenCV ta kết ảnh làm mờ: Hình 3-5 Kết bước làm mờ ảnh Phân ngưỡng Tiếp theo thao tác chuyển qua ảnh nhị phân, hay gọi phân ngưỡng, ảnh sau lọc hàm Blur thao tác loại bỏ nhiễu thao tác việc chọn mức ngưỡng phù hợp Mục đích thao tác phân ngưỡng ảnh dùng để phục vụ cho việc tách đối tượng thuật toán Để thực việc phân ngưỡng OpenCV ta sử dụng hàm threshold, OpenCV hàm threshold trình bày sau: Threshold (src, dst, 40, 255, CV_THRESH_BINARY) Trong đó:  src ảnh xám đầu vào  dst ảnh đầu  40 giá trị ngưỡng  255 giá trị gán pixel giá trị lớn giá trị ngưỡng  CV_THRESH_BINARY loại phân ngưỡng Tùy theo loại phân ngưỡng mà pixel gán giá trị khác nhau:  THRESH_BINARY: Nếu giá trị pixel lớn ngưỡng gán maxval Ngược lại gán  THRESH_BINARY_INV: Nếu giá trị pixel lớn ngưỡng gán Ngược lại gán maxval  THRESH_TRUNC: Nếu giá trị pixel lớn ngưỡng gán giá trị ngưỡng Ngược lại giữ nguyên giá trị Sau thực phân ngưỡng hàm threshold OpenCV ta kết ảnh phân ngưỡng sau: Hình 3-6 Kết trình phân ngưỡng 3.3.2 Bước 2: Tách đối tượng Hình ảnh sử dụng hình ảnh đồng xu chồng lấp phần lên nhau, tìm biên đếm số biên từ hình ảnh nhị phân kết khơng xác trường hợp Để đếm xác số tượng đồng xu ảnh ta phải tách đối tượng hình ảnh thành đối tượng không trùng lặp Để thực việc tách đối tượng ảnh thành vùng không trùng lặp, đồ án sử dụng thuật toán biến đổi khoảng cách (Distance transform) Trong trường hợp này, với điểm ảnh đối tượng thay khoảng cách tới điểm ảnh gần Nghĩa sau sử dụng thuật toán, điểm ảnh gần tâm đối tượng có giá trị cao hơn, điểm ảnh gần biên có giá trị nhỏ Trong OpenCV hàm biến đổi khoảng cách trình bày sau: distanceTransform (bw, dist, CV_DIST_L2, 3) ; Sau thực thuật toán biến đổi khoảng cách thực chuẩn hóa kết khoảng [0, 1], tức điểm sau thực biến đổi khoảng cách có thơng số giá trị, điểm xa biên có giá trị lớn, điểm gần biên có giá trị nhỏ, giá trị nằm khoảng [0, 1] Hình ảnh kết sau biến đổi khoảng cách chuẩn hóa: Hình 3-7 Hình ảnh sau sử dụng hàm biến đổi khoảng cách Để hoàn thành việc tách đối tượng thành vùng rời rạc ta thực phân ngưỡng lần ảnh thực phép biến đổi khoảng cách: Hình 3-8 Các đối tượng tách Sau đối tượng tách thành vùng rời rạc, việc cần làm tìm biên chúng Để thực việc tìm biên đối tượng sử dụng hàm findContours Trong OpenCV hàm tìm biên trình bày sau: findContours (dist_8u, contours, CV_RET_EXTRNAL, CV_CHAIN_APPROX_SIMPLE) ; Trong đó:   dist_8u hình ảnh cần tìm biên Contours biến lưu trữ đường biên tìm được, đường biên lưu trữ dạng vecto điểm  CV_RET_EXTRNAL sử dụng hàm hàm lấy đường biên bên ngoài, đường biên bên đối tượng bị loại bỏ  CV_CHAIN_APPROX_SIMPLE hàm có tác dụng nén đường viền trước lưu trữ, nén phân đoạn theo chiều ngang, chiều dọc chéo Sau đếm số biên hàm findContours có số lượng biên tương ứng với số đối tượng Để biết có đường biên tương ứng với đối tượng tìm ta sử dụng câu lệnh sau OpenCv: int ncomp = contours size () ; 3.3.3 Xác định ranh giới đối tượng Ở bước áp dụng thuật tốn watershed để tìm ranh giới đối tượng riêng biệt Để thực thuật toán watershed việc phải làm tạo ảnh marker Ảnh marker ảnh cho thuật toán watershed đối tượng xét đâu đối tượng Trong OpenCV, thuật toán tạo ảnh marker trình bày sau: Mat markers = Mat zeros (dist size () , CV_32SC1) ; For (int i=0; i< ncomp; i++) drawContours (marker, coutour, i, cv::Scalar::all (i+1) , -1) ; Trong thuật toán tạo ảnh marker phía có sử dụng vòng lặp for nhằm mục đích truy cập đến đường biên đối tượng tìm thuật tốn findCoutours để vẽ đường viền hàm drawContours cho Các đường viền dùng để nhận biết đối tượng mảnh marker Ngoài cần phải vẽ marker để thuật toán watershed phân biệt Giả sử đối tượng định ảnh cần vẽ marker gần cạnh ảnh Thuật tốn vẽ marker trình bày sau OpenCV: Circle (markers, Point (5, 5) , 3, CV_RGB (255, 255, 255) , -1) Sau tạo ảnh marker ta thực thuật toán watershed: watershed (src, markers) ; Bước cần thực tạo màu ngẫu nhiên cho đối tượng: Tạo màu ngẫu nhiên cho đối tượng OpenCV: vector colors; for (int i = 0; i < ncomp; i++) { int b = theRNG () uniform (0, 255) ; int g = theRNG () uniform (0, 255) ; int r = heRNG () uniform (0, 255) ; colors push_back (Vec3b ( (uchar) b, (uchar) g, (uchar) r) ) ; } Tạo ảnh kết quả: Mat dst = cv::Mat::zeros (markers size () , CV_8UC3) ; Điền đối tượng gán nhãn với màu sắc ngẫu nhiên for (int i = 0; i < markers rows; i++) { for (int j = 0; j < markers cols; j++) { int index = markers at (i, j) ; if (index > && index

Ngày đăng: 13/05/2019, 03:22

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan