Convolution functions.
More...
#include <string.h>
#include "conv.h"
Go to the source code of this file.
|
#define | CLAMP(X, A, B) (((X) < (A)) ? (A) : (((X) > (B)) ? (B) : (X))) |
| Clamp X to [A, B]. More...
|
|
|
void | SampledConv1D (float *Dest, int DestStride, const float *Src, int SrcStride, filter Filter, boundaryext Boundary, int N, int nStart, int nStep, int nEnd) |
| (Sub)sampled 1D FIR convolution More...
|
|
void | SeparableConv2D (float *Dest, float *Buffer, const float *Src, filter FilterX, filter FilterY, boundaryext Boundary, int Width, int Height, int NumChannels) |
| Separable 2D FIR convolution with constant boundary extension. More...
|
|
filter | MakeFilter (float *Coeff, int Delay, int Length) |
| Make a filter. More...
|
|
filter | AllocFilter (int Delay, int Length) |
| Allocate memory for a 1D FIR filter with length Length. More...
|
|
int | IsNullFilter (filter Filter) |
| Tests whether a filter is NULL. More...
|
|
filter | GaussianFilter (double Sigma, int R) |
| Construct an FIR approximation of a Gaussian filter. More...
|
|
boundaryext | GetBoundaryExt (const char *Boundary) |
| Get function pointer to boundary extension function. More...
|
|
Convolution functions.
- Author
- Pascal Getreuer getre.nosp@m.uer@.nosp@m.gmail.nosp@m..com
Copyright (c) 2010-2011, Pascal Getreuer All rights reserved.
This program is free software: you can use, modify and/or redistribute it under the terms of the simplified BSD License. You should have received a copy of this license along this program. If not, see http://www.opensource.org/licenses/bsd-license.html.
Definition in file conv.c.
#define CLAMP |
( |
|
X, |
|
|
|
A, |
|
|
|
B |
|
) |
| (((X) < (A)) ? (A) : (((X) > (B)) ? (B) : (X))) |
Clamp X to [A, B].
Definition at line 21 of file conv.c.
filter AllocFilter |
( |
int |
Delay, |
|
|
int |
Length |
|
) |
| |
Allocate memory for a 1D FIR filter with length Length.
Definition at line 161 of file conv.c.
filter GaussianFilter |
( |
double |
Sigma, |
|
|
int |
R |
|
) |
| |
Construct an FIR approximation of a Gaussian filter.
- Parameters
-
Sigma | standard deviation of the Gaussian filter |
R | support radius |
This function returns an FIR filter approximating a Gaussian with standard deviation Sigma. It is the responsibility of the caller to call FreeFilter to free the filter coefficients memory when done.
The support radius of the filter is R, and the filter length is 2*R + 1. A reasonable choice for R is R = (int)ceil(4*Sigma). The coefficients are normalized to have unit sum. If Sigma is zero, then the unit impulse filter is returned.
Definition at line 193 of file conv.c.
Get function pointer to boundary extension function.
- Parameters
-
Boundary | string naming the boundary extension |
- Returns
- function pointer on success, NULL on failure
Choices for Boundary are
- "zpd": zero-padded extension
- "sp0" or "const": constant extension
- "sp1" or "linear": linear extension
- "per": periodic extension
- "sym" or "symh": half-sample symmetric extension
- "symw": whole-sample symmetric extension
- "asym" or "asymh": half-sample antisymmetric extension
- "asymw": whole-sample antisymmetric extension
Definition at line 421 of file conv.c.
int IsNullFilter |
( |
filter |
Filter | ) |
|
Tests whether a filter is NULL.
Definition at line 173 of file conv.c.
filter MakeFilter |
( |
float * |
Coeff, |
|
|
int |
Delay, |
|
|
int |
Length |
|
) |
| |
Make a filter.
Definition at line 149 of file conv.c.
void SampledConv1D |
( |
float * |
Dest, |
|
|
int |
DestStride, |
|
|
const float * |
Src, |
|
|
int |
SrcStride, |
|
|
filter |
Filter, |
|
|
boundaryext |
Boundary, |
|
|
int |
N, |
|
|
int |
nStart, |
|
|
int |
nStep, |
|
|
int |
nEnd |
|
) |
| |
(Sub)sampled 1D FIR convolution
- Parameters
-
Dest | pointer to memory to hold the result |
DestStride | step between successive output samples |
Src | pointer to the input data |
SrcStride | step between successive input samples |
Filter | the filter |
Boundary | boundary extension |
N | the length of the convolution |
nStart,nStep,nEnd | sample the convolution at nStart:nStep:nEnd |
Definition at line 40 of file conv.c.
void SeparableConv2D |
( |
float * |
Dest, |
|
|
float * |
Buffer, |
|
|
const float * |
Src, |
|
|
filter |
FilterX, |
|
|
filter |
FilterY, |
|
|
boundaryext |
Boundary, |
|
|
int |
Width, |
|
|
int |
Height, |
|
|
int |
NumChannels |
|
) |
| |
Separable 2D FIR convolution with constant boundary extension.
- Parameters
-
Dest | pointer to memory to hold the result |
Buffer | workspace buffer of size Width*Height |
Src | pointer to the input image in row-major planar order |
FilterX | the horizontal filter |
FilterY | the vertical filter |
Boundary | boundary extension |
Width | image width |
Height | image height |
NumChannels | number of image channels |
Definition at line 123 of file conv.c.
const filter NullFilter = {NULL, 0, 0} |
NULL filter object.
Definition at line 25 of file conv.c.