/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef bim_FUNCTIONS_EM_H
#define bim_FUNCTIONS_EM_H
/**
* This files contains gerenral purpose functions.
*/
/* ---- includes ----------------------------------------------------------- */
#include "b_BasicEm/UInt8Arr.h"
#include "b_TensorEm/Functions.h"
#include "b_TensorEm/Flt16Alt2D.h"
/* ---- related objects --------------------------------------------------- */
/* ---- typedefs ----------------------------------------------------------- */
/** pyramidal image type */
enum bim_PyramidalImageType
{
bim_UINT8_PYRAMIDAL_IMG, /* byte representation of pyramical image */
bim_UINT16_PYRAMIDAL_IMG /* 16-bit representation of pyramical image */
};
/* ---- constants ---------------------------------------------------------- */
/* ---- external functions ------------------------------------------------- */
/** Warps an image with intermediate pyramidal downscaling if possible in order to minimize aliasing
* The actual warping happens using pixel interpolation
* *bufPtrA is an intermediate byte array that holds downscaled data (only needed when pyramidal downscaling happens; can be NULL otherwise)
* scaleThresholdA (16.16):
* specifies the minimum scale ratio (inImage/outImage) required to initiate prior filtering
* A value range of 2.0...4.0 is recommended (<= 0.0: disabled)
*
* offsPtrA specifies the pixel position (0,0) in the input image (format 16.0)
*/
void bim_filterWarpInterpolation( struct bbs_Context* cpA,
uint8* dstImagePtrA,
const uint8* srcImagePtrA,
uint32 srcImageWidthA,
uint32 srcImageHeightA,
const struct bts_Int16Vec2D* offsPtrA,
const struct bts_Flt16Alt2D* altPtrA,
uint32 dstWidthA,
uint32 dstHeightA,
struct bbs_UInt8Arr* bufPtrA,
uint32 scaleThresholdA );
/** Warps an image with intermediate pyramidal downscaling if possible in order to minimize aliasing
* The actual warping happens using pixel replication (fast but prone to artefacts)
* *bufPtrA is an intermediate byte array that holds downscaled data (only needed when pyramidal downscaling happens; can be NULL otherwise)
* scaleThresholdA (16.16):
* specifies the minimum scale ratio (inImage/outImage) required to initiate prior filtering
* A value range of 2.0...4.0 is recommended (0.0: disabled)
* offsPtrA specifies the pixel position (0,0) in the input image (format 16.0)
*/
void bim_filterWarpPixelReplication( struct bbs_Context* cpA,
uint8* dstImagePtrA,
const uint8* srcImagePtrA,
uint32 srcImageWidthA,
uint32 srcImageHeightA,
const struct bts_Int16Vec2D* offsPtrA,
const struct bts_Flt16Alt2D* altPtrA,
uint32 dstWidthA,
uint32 dstHeightA,
struct bbs_UInt8Arr* bufPtrA,
uint32 scaleThresholdA );
/** Selects proper warp function above
* offsPtrA specifies the pixel position (0,0) in the input image (format 16.0)
*/
void bim_filterWarp( struct bbs_Context* cpA,
uint8* dstImagePtrA,
const uint8* srcImagePtrA,
uint32 srcImageWidthA,
uint32 srcImageHeightA,
const struct bts_Int16Vec2D* offsPtrA,
const struct bts_Flt16Alt2D* altPtrA,
uint32 dstWidthA,
uint32 dstHeightA,
struct bbs_UInt8Arr* bufPtrA,
uint32 scaleThresholdA,
flag interpolateA );
#endif /* bim_FUNCTIONS_EM_H */