Intel® Integrated Performance Primitives
Deliberate problems developing high-performance vision, signal, security, and storage applications.

Problem with BoxFilter and NAN values

benz__alexander
Beginner
360 Views

Hi there,

we're using ipp for blurring arbitrary float data fields. The problem we encounter is that if there are NAN values inside the source data field, the result is a data field with only NAN values. Can anyone explain why this happens when applying a simple box filter ? As far as I understand it, the filter is not applied incrementally, so the worst that should happen is that the "border values" become NAN.

The code looks as follows :

[cpp]void blur(float* data, int width, int height, int radius)
{
if(radius < 1 || data == 0)
return;

// first make sure we have an image big enough for our filter operation

unsigned int radius2 = radius*2;

float* tmpData = new float[(width+radius2)*(height+radius2)];

IppiSize srcRoi = { width, height };
IppiSize dstRoi = { width+radius2, height+radius2 };

IppStatus result;

result = ippiCopyReplicateBorder_32f_C3R( data, width*3*4, srcRoi, tmpData, (width+radius2)*3*4, dstRoi, radius, radius );

int offset = ((width+radius2)*radius + radius);

IppiSize mask = { radius2+1, radius2+1 };
IppiPoint anchor = { radius, radius };

result = ippiFilterBox_32f_C3R( tmpData+offset*3, (width+radius2)*3*4, data, width*3*4, srcRoi, mask, anchor );

delete [] tmpData;
}
[/cpp]

Help is greatly appreciated :-)

ALex

0 Kudos
1 Reply
benz__alexander
Beginner
360 Views

Example Data :

[cpp]Source Data:

nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan nan nan
nan nan nan nan 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 87.00 87.00 87.00
0.00 0.00 84.00 84.00 84.00 85.00 85.00 87.00 88.00 90.00 92.00 92.00
87.00 87.00 88.00 90.00 91.00 94.00 95.00 97.00 98.00 100.00 101.00 101.00
100.00 100.00 101.00 102.00 102.00 102.00 102.00 102.00 101.00 102.00 102.00 102.00
100.00 100.00 101.00 102.00 102.00 102.00 102.00 102.00 101.00 102.00 102.00 102.00

Result Data:

nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan
nan nan nan nan nan nan nan nan nan nan

[/cpp]

0 Kudos
Reply