Lọc hình ảnh

Một phần của tài liệu biên dịch tài liệu hướng dẫn sử dụng bộ thư viện nguồn mở opencv (Trang 113)

2. Kinh nghiệ m:

2.1Lọc hình ảnh

Hàm và các lớp học được mô tả trong phần này được sử dụng để thực hiện khác hau, tuyến tính hoặc phi tuyến tính lọc các hoạt động trên hình ảnh 2D (đại diện là cv), có nghĩa là, đối với mỗi vị trí pixel (x, y) trong nguồn hình ảnh một số khu vực (thường là hình chữ nhật) được xem xét và được sử dụng để tính toán các phản ứng. Trong trường hợp của một bộ lọc tuyến

tính, nó là một tổng trọng số của các giá trị pixel, trong trường hợp của hình thái học hoạt động

đó là ... tối thiểu hoặc tối đa phản ứng tính toán được lưu trữđến đích hình ảnh ở cùng một vị

trí (x, y). Nó có nghĩa là, rằng hình ảnh đầu ra sẽ có kích thước tương tự như hình ảnh nhập vào. Thông thường, Hàm hỗ trợ đa kênh mảng, trong trường hợp này mỗi kênh xử lý độc lập, do đó hình ảnh đầu ra cũng sẽ có cùng số lượng các kênh như là một đầu vào.

Một tính năng phổ biến của các Hàm và các lớp học được mô tả trong phần này là, không giống như Hàm số học đơn giản, họ cần phải ngoại suy các giá trị của một sốđiểm ảnh không tồn tại. Đối với cũ Ví dụ, nếu chúng ta muốn làm mịn hình ảnh bằng cách sử dụng một Gaussian 3 × 3 bộ lọc, sau đó trong lúc xử lý các điểm ảnh bên trái trong mỗi hàng, chúng tôi cần điểm ảnh bên trái của họ, tức là bên ngoài của hình ảnh. Chúng tôi có thể cho phép những

điểm ảnh tương tự như các điểm ảnh hình ảnh trái (tức là sử dụng "nhân rộng biên giới" extrapolation phương pháp), hoặc giảđịnh rằng tất cả các điểm ảnh không tồn tại là số không ("contant biên giới" ngoại suy phương pháp).

IplConvKernel

Một IplConvKernel là một hạt nhân chập hình chữ nhật, được tạo ra bởi Hàm CreateStructuringElementEx.

cvCopyMakeBorder

Bản sao một hình ảnh và làm cho một biên giới xung quanh nó. void cvCopyMakeBorder( const CvArr* src, CvArr* dst, CvPoint offset, int bordertype, CvScalar value=cvScalarAll(0) ); src Các hình ảnh nguồn dst Các hình ảnh điểm đến

offset Tọa độ của góc trên bên trái (hoặc phía dưới bên trái trong trường hợp của hình ảnh phía dưới bên trái xuất xứ) của hình chữ nhật hình ảnh điểm đến, nơi nguồn hình ảnh (ROI) được sao chép. Kích thước của rectanlge phù hợp với nguồn hình ảnh kích thước / ROI kích thước bordertype Loại biên giới để tạo ra xung quanh hình chữ nhật hình ảnh sao chép mã nguồn, các loại trong :

IPL_BORDER_CONSTANT biên giới được làm đầy với các giá trị cố định, được thông qua như một tham số cuối cùng của Hàm.

IPL_BORDER_REPLICATE các điểm ảnh từ các hàng trên và dưới, bên trái nhất và phải hầu hết các cột được nhân rộng đểđiền vào các biên giới.

(Hai loại khẩu khác từ IPL, IPL_BORDER_REFLECT và IPL_BORDER_WRAP, hiện không được hỗ trợ)

Hàm sao chép các mảng nguồn 2D thành phần bên trong của các mảng đích và làm cho một biên giới của các loại quy định xung quanh khu vực sao chép. Hàm này rất hữu dụng khi một trong những nhu cầu thi đua loại biên giới là khác nhau từ một trong những nhúng vào một thuật toán cụ thể implementation. Ví dụ, hình thái Hàm, cũng như hầu hết các Hàm lọc khác trong OpenCV, nội bộ sử dụng các loại biên giới nhân rộng, trong khi người sử dụng có thể

cần một biên giới không, biên giới, tràn đầy 1 hoặc 255. cvCreateStructuringElementEx Tạo một yếu tố cấu trúc. IplConvKernel* cvCreateStructuringElementEx( int cols, int rows, int anchorX, int anchorY, int shape, int* values=NULL ); cols Số cột trong các yếu tố cấu trúc rows Số hàng trong các yếu tố cấu trúc

anchorX tương đối ngang bù đắp của các điểm neo anchorY thẳng đứng tương đối bù đắp của các điểm neo shape Hình dạng của các yếu tố cấu trúc, có thể có giá trị sau:

CV_SHAPE_RECT một yếu tố hình chữ nhật CV_SHAPE_CROSS một yếu tố hình chữ thập CV_SHAPE_ELLIPSE một yếu tố elip

CV_SHAPE_CUSTOM một yếu tố người dùng định nghĩa. Trong trường hợp này các values tham số quy định cụ thể mặt nạ, có nghĩa là, những người hàng xóm của điểm ảnh phải

được xem xét

values Con trỏ trỏ tới các yếu tố cấu trúc dữ liệu, một mảng máy bay, đại diện cho hàng hàng quét nguyên tố của ma trận. Các giá trị khác không cho thấy điểm thuộc về phần tử. Nếu con trỏ NULL, sau đó tất cả các giá trị được coi là không-không, có nghĩa là phần tử của một hình chữ nhật. Tham số này được coi là chỉ khi hình là CV_SHAPE_CUSTOM

Hàm CreateStructuringElementEx phân bổ và lấp đầy IplConvKernel cấu trúc, mà có thể được sử dụng như một yếu tố cơ cấu trong hoạt động hình thái.

cvDilate Làm giãn một hình ảnh bằng cách sử dụng một yếu tố cấu trúc cụ thể. void cvDilate( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1 );

src Nguồn hình ảnh dst Điểm đến hình ảnh

element phần tử Cơ cấu sử dụng cho sự giãn nở. Nếu nó là NULL, một 3 × 3 hình chữ nhật cơ

cấu thành phần được sử dụng

iterations Số lần của thời gian giãn nởđược áp dụng

Hàm làm giãn các nguồn hình ảnh bằng cách sử dụng các yếu tố cấu trúc quy định cụ thể để

xác định hình dạng của một khu phốđiểm ảnh tối đa được lấy:

Hàm này hỗ trợ chế độ tại chỗ. Sự giãn nở có thể được áp dụng nhiều (lặp lại) lần. Đối với hình ảnh màu sắc, mỗi kênh được xử lý độc lập.

cvErode Làm xói mòn hình ảnh bằng cách sử dụng một yếu tố cấu trúc cụ thể. void cvErode( const CvArr* src, CvArr* dst, IplConvKernel* element=NULL, int iterations=1); src Nguồn hình ảnh dst Điểm đến hình ảnh (adsbygoogle = window.adsbygoogle || []).push({});

element Cơ cấu thành phần yếu tốđược sử dụng để xói mòn. Nếu nó là NULL, một 3 × 3 hình chữ nhật cơ cấu thành phần được sử dụng

iterations số lần xói mòn

Hàm làm xói mòn nguồn hình ảnh bằng cách sử dụng các yếu tố cấu trúc quy định cụ thể để

xác định hình dạng của một khu phố pixel mà tối thiểu là:

Hàm này hỗ trợ chếđộ tại chỗ. Xói mòn có thể được áp dụng nhiều (lặp lại) lần. Đối với hình

ảnh màu sắc, mỗi kênh được xử lý độc lập. cvFilter2D

Convolves một hình ảnh với hạt nhân. void cvFilter2D(

const CvArr* src, CvArr* dst,

const CvMat* kernel,

CvPoint anchor=cvPoint(-1,-1)); src Các hình ảnh nguồn

kernel Convolution hạt nhân , một ma trận điểm một kênh nổi. Nếu bạn muốn áp dụng khác nhau hạt nhân đến các kênh khác nhau, phân chia các hình ảnh vào máy bay màu sắc riêng biệt bằng cách sử dụng cvSplit xử lý cá nhân

anchor neo của hạt nhân cho biết vị trí tương đối của một điểm lọc trong hạt nhân. Neo shoud nằm trong hạt nhân. Giá trị mặc định đặc biệt (-1, -1) có nghĩa là nó là ở trung tâm hạt nhân Hàm áp dụng một bộ lọc tuyến tính tùy ý để hình ảnh. Hoạt động tại chỗ được hỗ trợ. Khi khẩu độ là một phần bên ngoài hình ảnh, Hàm nội suy các giá trịđiểm ảnh outlier từ các pixel gần nhất nằm bên trong hình ảnh. cvLaplace Tính Laplacian của một hình ảnh. void cvLaplace( const CvArr* src, CvArr* dst, int apertureSize=3); src Nguồn hình ảnh dst Điểm đến hình ảnh

apertureSize kích thước độ mở ống kính (nó có ý nghĩa tương tự như cvSobel)

Hàm tính toán Laplacian của nguồn hình ảnh bằng cách thêm vào thứ hai x và y các chất dẫn xuất tính bằng cách sử dụng các toán tử Sobel:

Thiết apertureSize = 1 cung cấp cho các phiên bản nhanh nhất là bằng convolving các hình ảnh với hạt nhân sau đây:

0 1 0 1 -4 1 1 0 1

Tương tự như Hàm cvSobel, mở rộng quy mô không được thực hiện và kết hợp cùng một đầu vào và định dạng đầu ra được hỗ trợ.

cvMorphologyEx

Thực hiện chuyển đổi hình thái học tiên tiến. void cvMorphologyEx( const CvArr* src, CvArr* dst, CvArr* temp, IplConvKernel* element, int operation, int iterations=1 ); src Nguồn hình ảnh dst Điểm đến hình ảnh

temp thời tạm thời hình ảnh, cần thiết trong một số trường hợp element Cơ cấu thành phần phần tử

operation Loại hình thái hoạt động, một trong những điều sau đây: CV_MOP_OPEN mở

CV_MOP_CLOSE đóng cửa CV_MOP_GRADIENT hình thái CV_MOP_TOPHAT "đầu mũ" CV_MOP_BLACKHAT "mũđen"

iterations số thời gian xói mòn và sự giãn nở được áp dụng

Hàm có thể thực hiện chuyển đổi hình thái học tiên tiến bằng cách sử dụng xói mòn và sự giãn nở là hoạt động cơ bản.

Mở cửa:

dst = open(src, element) = dilate(erode(src, element), element) Kết thúc:

dst = close(src, element) = erode(dilate(src, element), element) Hình thái độ dốc:

dst = morph grad(src, element) = dilate(src, element) erode(src, element) "Mũ":

dst = tophat(src, element) = src open(src, element) "Mũđen":

dst = blackhat(src, element) = close(src, element) src (adsbygoogle = window.adsbygoogle || []).push({});

Tạm thời hình ảnh tạm thời là cần thiết cho một gradient hình thái học, và trong trường hợp tại chỗ hoạt động đối với "đầu mũ" và "mũđen". cvPyrDown Downsamples một hình ảnh. void cvPyrDown( const CvArr* src, CvArr* dst,

int filter=CV GAUSSIAN 5x5 ); src Các hình ảnh nguồn

dst hình ảnh điểm đến, cần phải có một nửa chiều rộng và chiều cao lớn hơn so với nguồn filter Loại của bộ lọc được sử dụng cho chập, chỉ CV_GAUSSIAN 5x5 hiện đang được hỗ trợ. Hàm thực hiện các bước downsampling của phân hủy kim tự tháp Gaussian. Đầu tiên nó convolves nguồn hình ảnh với bộ lọc được chỉ định và sau đó downsamples hình ảnh bằng cách từ bỏ thậm chí cả hàng và cột.

cvReleaseStructuringElement Xoá một yếu tố cấu trúc.

element con trỏđến các yếu tố cấu trúc đã bị xóa

Hàm phát hành IplConvKernel cấu trúc mà không còn cần thiết. Nếu *element là NULL, Hàm không có tác dụng.

cvSmooth

Làm mềm hình ảnh trong một trong nhiều cách. void cvSmooth(

const CvArr* src, CvArr* dst,

int smoothtype=CV GAUSSIAN, int param1=3, int param2=0, double param3=0, double param4=0); src Các hình ảnh nguồn dst Các hình ảnh điểm đến smoothtype Loại làm mịn:

CV_BLUR_NO_SCALE tuyến tính convolution với param1 × param2 hộp hạt nhân (tất cả 1). Nếu bạn muốn làm mịn điểm ảnh khác nhau với các hạt nhân hộp kích thước khác nhau, bạn có thể sử dụng tích phân hình ảnh được tính toán bằng cách sử dụng cvIntegral

CV_BLUR tuyến tính convolution với param1 × param2 hộp hạt nhân (tất cả 1) với tiếp theo mở rộng quy mô bằng 1 / (param1 · param2)

CV_GAUSSIAN tuyến tính convolution với × param1 param2 Gaussian hạt nhân CV_MEDIAN trung bình lọc với một param1 × param1 vuông khẩu độ

CV_BILATERAL phương song phương bộ lọc với một param1 × param1 vuông khẩu

độ, màu sắc sigma = param3 và không gian sigma = param4. Nếu param1 = 0, bên khẩu độ

vuông được thiết lập để cvRound (param4 * 1.5) * 2 +1. Thông tin về việc lọc song phương có thểđược tìm thấy tại

http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html param1 tham số đầu tiên của hoạt động làm mịn, chiều rộng khẩu độ. Phải tích cực số lẻ (1, 3, 5, ...)

param2 tham số thứ hai của hoạt động làm mịn, chiều cao khẩu độ. Bỏ qua CV_MEDIAN và CV_BILATERAL. Trong trường hợp đơn giản quy mô / không quy mô và Gaussian blur nếu param2 là số không, nó được thiết lập để param1. Nếu không, nó phải là một lẻ tích cực số. param3 Trong trường hợp của một tham số Gaussian tham số này có thể chỉ định Gaussian (tiêu chuẩn độ lệch). Nếu nó là số không, nó được tính toán từ các kích thước hạt nhân:

Sử dụng tiêu chuẩn sigma hạt nhân nhỏ (3 × 3-7 × 7) cho tốc độ tốt hơn. Nếu param3 là không bằng không, trong khi param1 param2 là số không, kích thước hạt nhân được tính từ sigma (để

cung cấp chính xác hoạt động đủ).

Hàm làm mềm một hình ảnh bằng cách sử dụng một trong một số phương pháp. Mỗi của các phương pháp có một số tính năng và hạn chếđược liệt kê dưới đây

Blur với quy mô không hoạt động với một kênh hình ảnh và hỗ trợ tích lũy của bit-8 để định dạng 16-bit (tương tự cvSobel và cvLaplace) và 32-bit dấu chấm động 32-bit floating-point

định dạng.

Mờ đơn giản và hỗ trợ Gaussian blur 1 hoặc 3-kênh, 8-bit và hình ảnh 32-bit dấu chấm động. Hai phương pháp có thể xử lý hình ảnh tại chỗ.

Bộ lọc trung bình và song phương làm việc với 1 hoặc 3-kênh hình ảnh 8-bit và không thể xử

lý hình ảnh tại chỗ. cvSobel

Tính toán đầu tiên thứ hai, các dẫn xuất hình ảnh thứ ba hoặc hỗn hợp bằng cách sử dụng một toán tử Sobel mở rộng. void cvSobel( const CvArr* src, CvArr* dst, int xorder, int yorder, int apertureSize=3 ); src Nguồn hình ảnh của loại CvArr dst Điểm đến hình ảnh

xorder thứ tự của x phẩm phái sinh yorder Trình tự các y phái sinh

apertureSize Kích thước của hạt nhân Sobel mở rộng, phải là 1, 3, 5 hoặc 7

Trong mọi trường hợp, ngoại trừ 1, một hạt nhân apertureSize × apertureSize tách sẽ được sử (adsbygoogle = window.adsbygoogle || []).push({});

dụng để tính đạo hàm. Đối với apertureSize = 1 a 3 × 1 hoặc 1 x 3 một hạt nhân được sử dụng (Gaussian làm mịn không được thực hiện). Ngoài ra còn có giá trị đặc biệt CV_SCHARR (-1) tương ứng với một 3 × 3. Scharr bộ lọc có thể cho kết quả chính xác hơn 3 × 3 Sobel. Scharr khẩu độ

-3 0 3 -10 0 10

-3 0 3 cho x-phái sinh, hoán cho y-phái sinh.

Hàm tính toán các dẫn xuất hình ảnh bằng convolving hình ảnh thích hợp hạt nhân:

Các nhà khai thác Sobel kết hợp Gaussian làm mịn và sự khác biệt vì vậy kết quả là hơn hoặc ít hơn khả năng chống tiếng ồn. Thông thường, Hàm được gọi là (xorder = 1, yorder = 0, apertureSize = 3) hoặc (xorder = 0, yorder = 1, apertureSize = 3) để tính toán đầu tiên x hoặc y-hình ảnh phái sinh. Trường hợp đầu tiên tương ứng với một hạt nhân:

-1 0 1 -2 0 2 -1 0 1 và thứ hai tương ứng với một hạt nhân:

-1 -2 -1 0 0 0 1 2 1 hoặc một hạt nhân: 1 2 1 0 0 0 -1 2 -1

tùy thuộc vào nguồn gốc hình ảnh (nguồn gốc lĩnh vực cấu trúc IplImage). Mở rộng quy mô không được thực hiện, do đó hình ảnh điểm đến thường có số lượng lớn (giá trị tuyệt đối) so với nguồn hình ảnh. Để tránh tràn, Hàm đòi hỏi một hình ảnh điểm đến 16-bit nếu nguồn hình

ảnh là 8-bit. Kết quả có thể được chuyển đổi trở lại-8 bit bằng cách sử dụng cvConvertScale hoặc các cvConvertScaleAbs Hàm. Bên cạnh đó hình ảnh 8-bit Hàm có thể xử lý hình ảnh 32- bit floating-point. Cả hai nguồn và đích đến phải là một kênh hình ảnh có kích thước bằng nhau hoặc kích cỡ ROI bằng.

Một phần của tài liệu biên dịch tài liệu hướng dẫn sử dụng bộ thư viện nguồn mở opencv (Trang 113)