Bài giảng Xử lý ảnh số - Chương 3: Xử lý ảnh trong miền không gian - Ngô Quốc Việt
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Xử lý ảnh số - Chương 3: Xử lý ảnh trong miền không gian - Ngô Quốc Việt", để 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_xu_ly_anh_so_chuong_3_xu_ly_anh_trong_mien_khong_g.pdf
Nội dung text: Bài giảng Xử lý ảnh số - Chương 3: Xử lý ảnh trong miền không gian - Ngô Quốc Việt
- XỬ LÝ ẢNH TRONG MIỀN KHÔNG GIAN NGÔ QUỐC VIỆT TPHCM-2012
- 1. Các xử lý logic và số học trên ảnh . Các thao tác logic . Trừ ảnh , trung bình ảnh 2. Các bộ lọc không gian cơ bản 3. Các bộ lọc không gian làm trơn ảnh . Bộ lọc tuyến tính làm trơn . Các bộ lọc Order-Statistics 4. Các bộ lọc không gian làm nét ảnh 5. Các giải thuật khử nhiễu Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 2
- Thực hiện các phép logic giữa hai hoặc nhiều ảnh. Cụ thể . NOT c = a . OR c = a + b . AND c = a b . XOR c = a b = a (b) + (a b) . SUB c = a \ b = a – b = a (b) Chỉ cần 3 toán tử: AND, OR, NOT Mỗi thao tác thực hiện trên từng điểm ảnh Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 3
- Gốc Mặt nạ AND Gốc Mặt nạ OR Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 4
- Sử dụng các thao tác logic trên ma trận của OpenCV int _tmain(int argc, _TCHAR* argv[]) { IplImage *img1 = cvLoadImage(“ \\ \\images\\building.jpg"); IplImage *img2 = cvLoadImage(".\\ \\images\\black.jpg"); IplImage *img3, iplhdr; CvMat * mat1, * mat2, mat3, mathdr1, mathdr2; mat1 = cvGetMat(img1, &mathdr1); mat2 = cvGetMat(img2, &mathdr2); mat3 = *mat1; cvAnd(mat1, mat2, &mat3); //cvOr; cvNot; cvAdd; cvSub img3 = cvGetImage(&mat3, &iplhdr); cvNamedWindow("Logics",CV_WINDOW_AUTOSIZE); cvShowImage("Logics", img3); cvWaitKey(0); cvDestroyWindow("Logics:"); cvReleaseImage(&img1); cvReleaseImage(&img2); return 0; } Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 5
- Thực hiện trên các pixel của ảnh xám Thao tác Định nghĩa Kiểu dữ liệu Output ADD c = a + b Nguyên SUB c = a – b Nguyên MUL c = a * b Nguyên hoặc thực DIV c = a / b Thực LOG c = log (a) Thực EXP c = exp(a) Thực SQRT c = sqrt(a) Thực TRIG c = sin/cos/tan(a) Thực INVERT c = (2b -1 ) - a Nguyên Thường sử dụng toán tử SUB nhằm tách phần nổi và nền Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 6
- Nhằm loại bớt phần “nền” ra khỏi ảnh cần phân tích (y khoa, thiên văn, ) Nguồn: R. F. Gonzalez & R.Wood Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 7
- Có thể ứng dụng để làm giảm nhiễu trong ảnh. Bằng cách lấy trung bình pixel từ các ảnh nhiễu (ngẫu nhiên, nhiệt, v.v) để tạo ra pixel cùng tọa độ trong ảnh output. Cho K ảnh nhiễu khác nhau, ảnh trung bình được xác định bởi Hàm noise 1 K gi (x, y) f (x, y) ni (x, y) g(x, y) gi (x, y) K i 1 Ảnh được làm rõ hơn bằng tạo ra K ảnh nhiễu (ngẫu nhiên, muối tiêu – thảo luận sau), và lấy trung bình các ảnh này. Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 8
- Trung bình của ảnh nhiễu tiến gần đến ảnh tốt f(x,y). E(g(x, y)) f (x, y) Phương sai 1 Dùng các hàm g (x,y) K gi (x,y) rand(): (rand()/(float)0x7fff)-0.5; cvGetSize: lấy kích thước ảnh K càng tăng nhiễu sẽ giảm cvCloneImage: tạo ảnh mới cvGetReal2D: get pixel value cvSetReal2D: set pixel value Sinh viên hãy viết chương trình giảm nhiễu bằng kỹ thuật “trung bình ảnh” Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 9
- K = 8 noisy images K = 16 noisy images Gần giống với ảnh gốc Ảnh bị nhiễu K = 64 noisy images K = 128 noisy images Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 10
- Dựa trên cáp phép toán về tích chập (convolution) trên lân cận của từng pixel. Phép toán chập là trung tâm của hầu hết xử lý trên ảnh Lân cận vuông của một pixel sẽ được thực hiện chập với subimage cùng kích thước để tạo ra giá trị mới của pixel đang xét. Subimage gọi là: filter (bộ lọc), mask (mặt nạ), kernel (nhân chập), template (mẫu chập), hay window (cửa sổ chập). Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 11
- Filter/Mask được di chuyển từng pixel trên ảnh và thực hiện chập để tạo ra giá trị điểm ảnh mới Hình ảnh thể hiện cơ chế lọc Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 12
- Liên tục: Tích chập của 2 hàm f(x) và h(x) được định nghĩa bởi: g(x) f (x) h(x) f (m)h(x m)dm Rời rạc: g(n) f (n) h(n) f (k)h(n k) k Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 13
- Liên tục: Tích chập của 2 hàm f(x) và h(x) hai chiều được định nghĩa bởi: g(x, y) f (x, y) h(x, y) f (m,n)h(x m, y n)dmdn Rời rạc g(m,n) f (m,n) h(m,n) f (k,l)h(m k,n l) l k Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 14
- Kích thước kernel mxn, ảnh kích thước MxN, tích chập được định nghĩa bởi a b a (m 1)/ 2 g(x, y) f (x k, y l)h(k,l) l ak b b (n 1)/ 2 Thông thường, nhân chập có dạng vuông (m=n), với m và n là số lẻ. Chú ý: tâm của nhân chập thường ở giữa cửa cổ chập. Tại một vị trí bất kỳ, pixel đích sẽ bằng tổng các tích giữa pixel nguồn với các phần tử tương ứng trong nhân Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 15
- Tích chập giữa f(M1xN1) và nhân h(M2xN2) có thể tạo ra các ma trận có kích thước như sau, tùy thuộc vào kiểu chập. Giữ nguyên kích thước: M1xN1 (same convolution) Tăng kích thước : (M1+M2-1)x(N1+N2-1) (full convolution) Giảm kích thước: (M1-M2+1)x(N1-N2+1) (valid convolution) Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 16
- Nhân chập h(j,k) là tách được nếu h( j,k) hrow(k) hcol ( j) Khi đó, phép lọc có thể thực hiện theo cách sau J 1 K 1 c(m,n) hrow(k)a(m j,n k)hcol ( j) j 0 k 0 Độ phức tạp khi tính toán trên mỗi điểm ảnh từ O(J*K) giảm xuống O(J+K). Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 17
- Giữ nguyên kích thước Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 18
- Tăng kích thước Tâm ma trận chập nằm ngoài ảnh Giảm kích thước Ma trận chập nằm gọn trong ảnh Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 19
- for(int y = 0; y = height || (x+(j-kMiddleWidth)) = width) { result = 0; } else { result = input[y+(i-kMiddleHeight), x+(j-kMiddleWidth)] * kernel[I, j]; } sum += result; } } result[y, x] = sum; } } Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 20
- Sử dụng các nhân chập với các hệ số thay đổi có thể tạo ra các hiệu ứng khác nhau trên ảnh output. Một số hiệu ứng của lọc không gian . Làm trơn hoặc mờ ảnh: giảm nhiễu, giảm chi tiết nhỏ. . Làm nét ảnh . Phát hiện biên (trình bày chi tiết trong bài giảng sau) Các bộ lọc không gian thường có kích thước 3x3 hoặc 5x5. Một số trường hợp dùng ma trận 7x7 Ngoài ra có thể sử dụng các lọc phi tuyến (thảo luận trong “Xla_BaiGiang04”) Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 21
- Sử dụng bộ lọc không gian tuyến tính để tính giá trị pixel output là trung bình của các pixel trong nhân chập. Còn được gọi là bộ lọc trung bình hay lowpass filter. Các bộ lọc “đều” có dạng chữ nhật hay tròn. Cụ thể 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 h ( j,k) 1 1 1 1 1 hcirc ( j,k) 1 1 1 1 1 rect 25 21 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 Kết quả các cụm pixel nhỏ (nhỏ hơn kích thước nhân chập) sẽ bị “hòa” vào các vùng pixel lớn hơn. Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 22
- Có thể dùng các bộ lọc biến thể khác để làm trơn ảnh 1 1 1 1 2 1 1 1 h ( j,k) 1 1 1 h( j,k) 2 4 2 rect 16 9 1 2 1 1 1 1 Mặt nạ thứ hai được gọi là lấy trung bình có trọng số. Nghĩa là các pixel sẽ được nhân với các hệ số khác nhau. Với trung bình có trọng số, pixel output được xác a b định bởi w(s,t) f (x s, y t) s at b g(x, y) a b w(s,t) s at b Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 23
- Một số bộ lọc làm trơn ảnh khác: tam giác, Gauss, bộ lọc trên miền Fourier (thảo luận sau), các bộ lọc phi tuyến (trung vị, Kuwahara) Tam giác: là phép chập của hai bộ lọc đều đồng nhất (đều chữ nhật hoặc đều tròn) 1 2 3 2 1 0 0 1 0 0 2 4 6 4 2 0 2 2 2 0 1 1 h ( j,k) 3 6 9 6 3 h ( j,k) 1 2 5 2 1 rect 81 circ 25 2 4 6 4 2 0 2 2 2 0 1 2 3 2 1 0 0 1 0 0 Dạng chóp Dạng nón Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 24
- Kết quả làm trơn ảnh với bộ lọc trung bình có kích thước 3, 5, 9, 15, 35 Ảnh gốc Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 25
- Có nhiều cách để tạo bộ lọc Gauss (tham khảo tài liệu [1] trang 96-100). Bộ lọc Gauss là mờ/trơn ảnh 0 0 0 5 0 0 0 0 5 18 32 18 5 0 0 18 64 100 64 18 0 5 32 100 100 100 32 5 0 18 64 100 64 18 0 0 5 18 32 18 5 0 0 0 0 5 0 0 0 Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 26
- #include "highgui.h" #include "cv.h" void main() { IplImage* src = cvLoadImage("lena.jpg", 1); IplImage* dst = cvCreateImage(cvGetSize(src), src->depth, src->nChannels); cvSmooth(src, dst, CV_BLUR, 3, 3); cvNamedWindow("src", 1); cvShowImage("src", src); cvNamedWindow("dst", 1); cvShowImage("dst", dst); cvReleaseImage(&src); cvReleaseImage(&dst); cvWaitKey(0); } Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 27
- Bộ lọc trung vị . Giá trị điểm ảnh output trong nhân chập đang xét bằng giá trị độ sáng thứ (J*K)/2 trong phần ảnh đang được chập . Một biến thể: thay vì lọc trung vị, có thể lọc phần trăm. Nghĩa là thay vì lấy 50% giá trị sáng mà bằng p% (từ 0% - lọc cực tiểu - đến 100% - lọc cực đại) Bộ lọc Kuwahara . Cho phép giữ lại các “cạnh” trên ảnh trong quá trình làm trơn. Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 28
- Trung vị: cho dãy {x1, x2, , xn} , trung vị của dãy được xác định bởi n x 1 n odd 2 Med({xn}) n n x 1 or x 1 n even 2 2 n x x Nhận xét: i min tại Med({xi}). i 1 Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 29
- Tìm trung vị trong phần ảnh đang xét (cửa sổ quét qua) {I(q) | q W(P)} Med(P) Gán giá trị cho pixel “tâm”. I(P) I(P) Med(P) 0 I(P) Med(P) else 1 2 3 2 1 2 3 2 Ví dụ: 4 16 2 1 4 2 2 1 I I 4 2 1 1 4 2 1 1 2 1 2 1 2 1 2 1 Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 30
- 131 Sắp xếp các 133 cường độ sáng 133 trong lân cận 136 của p. 140 143 p 147 152 median được 154 gán cho pixel 157 tại vị trí p 160 trong ảnh 162 output. 163 164 165 171 Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 31
- median blurred noisy Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 32
- Ảnh nhiễu 3x3-median x 1 3x3-blur x 1 Lọc trung vị cho kết quả khử nhiễu tốt hơn so với các bộ lọc làm trơn ảnh Lọc trung vị duy trì cạnh tốt hơn so với blurring filter. Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 33
- Chia nhân chập thành các vùng con. Tính độ sáng trung bình của mỗi vùng con. Chọn độ sáng trung bình nào có phương sai nhỏ nhất làm độ sáng của pixel trong nhân chập lớn đang xét Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 34
- Bộ lọc Miền Kiểu Giá Tách được Đều Không gian Tuyến tính Vuông Có Đều Không gian Tuyến tính Tròn Không Tam giác Không gian Tuyến tính Vuông Có Tam giác Không gian Tuyến tính Tròn Không Gauss Không gian Tuyến tính Có Trung vị Không gian Phi tuyến Vuông Không Kuwahara Không gian Phi tuyến Không Không Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 35
- Sinh viên sử dụng các hàm sau để thực hiện yêu cầu làm trơn ảnh với các nhân chập khác nhau. cvFilter2D: để thực hiện lọc ảnh (đổi nhân chập để làm trơn ảnh) cvSmooth: làm trơn ảnh với các nhân chập được định nghĩa sẵn trong OpenCV) Bài giảng Xử lý ảnh-TS. Ngô Quốc Việt 36