Linear Methods for Image Interpolation
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
Macros | Functions | Variables
conv.c File Reference

Convolution functions. More...

#include <string.h>
#include "conv.h"
Include dependency graph for conv.c:

Go to the source code of this file.

Macros

#define CLAMP(X, A, B)   (((X) < (A)) ? (A) : (((X) > (B)) ? (B) : (X)))
 Clamp X to [A, B]. More...
 

Functions

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...
 

Variables

const filter NullFilter = {NULL, 0, 0}
 NULL filter object. More...
 

Detailed Description

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.

Macro Definition Documentation

#define CLAMP (   X,
  A,
 
)    (((X) < (A)) ? (A) : (((X) > (B)) ? (B) : (X)))

Clamp X to [A, B].

Definition at line 21 of file conv.c.

Function Documentation

filter AllocFilter ( int  Delay,
int  Length 
)

Allocate memory for a 1D FIR filter with length Length.

Definition at line 161 of file conv.c.

Here is the call graph for this function:

Here is the caller graph for this function:

filter GaussianFilter ( double  Sigma,
int  R 
)

Construct an FIR approximation of a Gaussian filter.

Parameters
Sigmastandard deviation of the Gaussian filter
Rsupport 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.

Here is the call graph for this function:

Here is the caller graph for this function:

boundaryext GetBoundaryExt ( const char *  Boundary)

Get function pointer to boundary extension function.

Parameters
Boundarystring 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.

Here is the call graph for this function:

Here is the caller graph for this function:

int IsNullFilter ( filter  Filter)

Tests whether a filter is NULL.

Definition at line 173 of file conv.c.

Here is the caller graph for this function:

filter MakeFilter ( float *  Coeff,
int  Delay,
int  Length 
)

Make a filter.

Definition at line 149 of file conv.c.

Here is the caller graph for this function:

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
Destpointer to memory to hold the result
DestStridestep between successive output samples
Srcpointer to the input data
SrcStridestep between successive input samples
Filterthe filter
Boundaryboundary extension
Nthe length of the convolution
nStart,nStep,nEndsample 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
Destpointer to memory to hold the result
Bufferworkspace buffer of size Width*Height
Srcpointer to the input image in row-major planar order
FilterXthe horizontal filter
FilterYthe vertical filter
Boundaryboundary extension
Widthimage width
Heightimage height
NumChannelsnumber of image channels

Definition at line 123 of file conv.c.

Here is the caller graph for this function:

Variable Documentation

const filter NullFilter = {NULL, 0, 0}

NULL filter object.

Definition at line 25 of file conv.c.