conv2 - 2-D convolution - MATLAB (original) (raw)

Syntax

Description

[C](#bvgtez6-C) = conv2([A](#bvgtez6-A),[B](#bvgtez6-B)) returns the two-dimensional convolution of matrices A and B.

example

[C](#bvgtez6-C) = conv2([u](#bvgtez6-u),[v](#bvgtez6-v),[A](#bvgtez6-A)) first convolves each column of A with the vectoru, and then it convolves each row of the result with the vector v. This behavior applies regardless of whetheru or v is a row or column vector.

example

[C](#bvgtez6-C) = conv2(___,[shape](#bvgtez6-shape)) returns a subsection of the convolution according to shape. For example, C = conv2(A,B,"same") returns the central part of the convolution, which is the same size as A.

example

Examples

collapse all

In applications such as image processing, it can be useful to compare the input of a convolution directly to the output. The conv2 function allows you to control the size of the output.

Create a 3-by-3 random matrix A and a 4-by-4 random matrix B. Compute the full convolution of A and B, which is a 6-by-6 matrix.

A = rand(3); B = rand(4); Cfull = conv2(A,B)

Cfull = 6×6

0.7861    1.2768    1.4581    1.0007    0.2876    0.0099
1.0024    1.8458    3.0844    2.5151    1.5196    0.2560
1.0561    1.9824    3.5790    3.9432    2.9708    0.7587
1.6790    2.0772    3.0052    3.7511    2.7593    1.5129
0.9902    1.1000    2.4492    1.6082    1.7976    1.2655
0.1215    0.1469    1.0409    0.5540    0.6941    0.6499

Compute the central part of the convolution Csame, which is a submatrix of Cfull with the same size as A. Csame is equal to Cfull(3:5,3:5).

Csame = conv2(A,B,"same")

Csame = 3×3

3.5790    3.9432    2.9708
3.0052    3.7511    2.7593
2.4492    1.6082    1.7976

The Sobel edge-finding operation uses a 2-D convolution to detect edges in images and other 2-D data.

Create and plot a 2-D pedestal with interior height equal to one.

A = zeros(10); A(3:7,3:7) = ones(5); mesh(A)

Figure contains an axes object. The axes object contains an object of type surface.

Convolve the rows of A with the vector u, and then convolve the rows of the result with the vector v. The convolution extracts the horizontal edges of the pedestal.

u = [1 0 -1]'; v = [1 2 1]; Ch = conv2(u,v,A); mesh(Ch)

Figure contains an axes object. The axes object contains an object of type surface.

To extract the vertical edges of the pedestal, reverse the order of convolution with u and v.

Cv = conv2(v,u,A); mesh(Cv)

Figure contains an axes object. The axes object contains an object of type surface.

Compute and plot the combined edges of the pedestal.

figure mesh(sqrt(Ch.^2 + Cv.^2))

Figure contains an axes object. The axes object contains an object of type surface.

Input Arguments

collapse all

Input array, specified as a vector or matrix.

Data Types: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
Complex Number Support: Yes

Second input array, specified as a vector or a matrix to convolve with A. The array B does not have to be the same size as A.

Data Types: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
Complex Number Support: Yes

Input vector, specified as a row or column vector. u convolves with each column of A.

Data Types: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
Complex Number Support: Yes

Second input vector, specified as a row or column vector. v convolves with each row of the convolution of u with the columns of A.

Data Types: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
Complex Number Support: Yes

Subsection of the convolution, specified as one of these values:

Output Arguments

collapse all

2-D convolution, returned as a vector or matrix. When A and B are matrices, then the convolution C = conv2(A,B) has size size(A)+size(B)-1. When [m,n] = size(A), p = length(u), and q = length(v), then the convolution C = conv2(u,v,A) has m+p-1 rows and n+q-1 columns.

When one or more input arguments to conv2 are of type single, then the output is of type single. Otherwise, conv2 converts inputs to type double and returns type double.

Data Types: double | single

More About

collapse all

For discrete, two-dimensional matrices A and_B_, the following equation defines the convolution of_A_ and B:

p and q run over all values that lead to legal subscripts of A(p,q) and B(j-p+1,k-q+1).

Using this definition, conv2 calculates the direct convolution of two matrices, rather than the FFT-based convolution.

Extended Capabilities

expand all

Theconv2 function supports tall arrays with the following usage notes and limitations:

For more information, see Tall Arrays.

The conv2 function fully supports GPU arrays. To run the function on a GPU, specify the input data as a gpuArray (Parallel Computing Toolbox). For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).

Version History

Introduced before R2006a