Intel® Integrated Performance Primitives (Intel® IPP) Developer Guide and Reference

ID 790148
Date 3/22/2024
Public
Document Table of Contents

MorphCloseBorder

Closes an image.

Syntax

IppStatus ippiMorphCloseBorder_<mod>(const Ipp<datatype>* pSrc, int srcStep, Ipp<datatype>* pDst, int dstStep, IppiSize roiSize, IppiBorderType borderType, Ipp<datatype> borderValue, const IppiMorphAdvState* pSpec, Ipp8u* pBuffer);

Supported values for mod:

8u_C1R 16u_C1R 16s_C1R 32f_C1R

IppStatus ippiMorphCloseBorder_<mod>(const Ipp<datatype>* pSrc, int srcStep, Ipp<datatype>* pDst, int dstStep, IppiSize roiSize, IppiBorderType borderType, const Ipp<datatype> borderValue[3], const IppiMorphAdvState* pSpec, Ipp8u* pBuffer);

Supported values for mod:

8u_C3R 32f_C3R

IppStatus ippiMorphCloseBorder_<mod>(const Ipp<datatype>* pSrc, int srcStep, Ipp<datatype>* pDst, int dstStep, IppiSize roiSize, IppiBorderType borderType, const Ipp<datatype> borderValue[4], const IppiMorphAdvState* pSpec, Ipp8u* pBuffer);

Supported values for mod:

8u_C4R 32f_C4R

IppStatus ippiMorphCloseBorder_1u_C1R(const Ipp8u* pSrc, int srcStep, int srcBitOffset, Ipp8u* pDst, int dstStep, int dstBitOffset, IppiSize roiSize, IppiBorderType borderType, Ipp8u borderValue, const IppiMorphAdvState* pSpec, Ipp8u* pBuffer);

Include Files

ippcv.h

Domain Dependencies

Headers: ippcore.h, ippvm.h, ipps.h, ippi.h

Libraries: ippcore.lib, ippvm.lib, ipps.lib, ippi.lib

Parameters

pSrc

Pointer to the source image ROI.

srcStep

Distance, in bytes, between the starting points of consecutive lines in the source image.

srcBitOffset

Offset, in bits, from the first byte of the source image (for 1u_C1R flavor).

pDst

Pointer to the destination image ROI.

dstStep

Distance, in bytes, between the starting points of consecutive lines in the destination image.

dstBitOffset

Offset, in bits, from the first byte of the destination image (for 1u_C1R flavor).

roiSize

Size of the source and destination image ROI.

borderType

Type of border. Possible values are:

ippBorderRepl

Border is replicated from the edge pixels.

ippBorderInMem

Border is obtained from the source image pixels in memory.

borderValue, borderValue[3], borderValue[4]

Constant value to assign to pixels of the constant border. This parameter is applicable only to the ippBorderConst border type.

pSpec

Pointer to the specification structure.

pBuffer

Pointer to the external buffer required for dilation operations.

Description

Before using this function, you need to initialize the morphology specification structure using the MorphAdvInit function.

This function operates with ROI.

This function performs closing of a rectangular ROI area inside a one-, three-, or four-channel 2D image using the mask specified in the pSpec structure.

The result is equivalent to successive dilation of the source image by the structured element (mask) and erosion by the reverted structured element.

NOTE:

This function requires that the image ROI does not exceed the maximum width and height roiSize specified by the initialization functions.

Usage example of this function is similar to the example provided with the MorphOpenBorder function description.

Return Values

ippStsNoErr

Indicates no error.

ippStsNullPtrErr

Indicates an error when one of the specified pointers is NULL.

ippStsSizeErr

Indicates an error condition when:

  • roiSize has a field with a zero or negative value

  • one of the ROI width or height is more than the corresponding size of ROI passed to the initialization functions

  • srcBitOffset or dstBitOffset is less than zero

ippStsStepErr

Indicates an error condition if srcStep or dstStep is less than roiSize.width * <pixelSize>.

ippStsNotEvenStepErr

Indicates an error condition if one of the step values for 16-bit integer images is not divisible by 2.

ippStsBorderErr

Indicates an error condition if borderType has an illegal value.

Example

The code example below demonstrates how to use the ippiMorphAdvGetSize_16u_C1R, ippiMorphAdvInit_16u_C1R, and ippiMorphCloseBorder_16u_C1R functions.

IppStatus func_MorfCloseBorder()
{
    IppiMorphAdvState* pSpec = NULL;
    Ipp8u* pBuffer = NULL;
    IppiSize roiSize = {5, 5};
    Ipp8u pMask[3*3] = {1, 1, 1,
                        1, 0, 1,
                        1, 1, 1};
    IppiSize maskSize = {3, 3};
    Ipp16u pSrc[5*5] = { 1, 2, 4, 1, 2,
                         5, 1, 2, 1, 2,
                         1, 2, 1, 2, 1,
                         2, 1, 5, 1, 2};
    Ipp16u pDst[5*5];
    int srcStep = 5*sizeof(Ipp16u);
    int dstStep = 5*sizeof(Ipp16u);
    int dstSize = 5;
    IppStatus status = ippStsNoErr;
    int specSize = 0, bufferSize = 0;
    IppiBorderType borderType= ippBorderRepl;
    Ipp16u borderValue = 0;
    

    status = ippiMorphAdvGetSize_16u_C1R( roiSize, maskSize, &specSize, &bufferSize );
    if (status != ippStsNoErr) return status;
 
    pSpec = (IppiMorphAdvState*)ippsMalloc_8u(specSize);
    pBuffer = (Ipp8u*)ippsMalloc_8u(bufferSize);
    
    status = ippiMorphAdvInit_16u_C1R( roiSize, pMask, maskSize, pSpec, pBuffer );
    if (status != ippStsNoErr) {
        ippsFree(pBuffer);
        ippsFree(pSpec);
        return status;
    }
    
    status = ippiMorphCloseBorder_16u_C1R (pSrc, srcStep, pDst, dstStep, roiSize, borderType, borderValue, pSpec, pBuffer);

    ippsFree(pBuffer);
    ippsFree(pSpec);
    return status;
}

The result is as follows:

pDst-> 
5 4 4 2 2
5 4 4 2 2
2 2 2 2 2
2 2 5 2 2
2 2 2 2 2

See Also