Community
cancel
Showing results for 
Search instead for 
Did you mean: 
benz__alexander
Beginner
81 Views

Problem with BoxFilter and NAN values

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
81 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]

Reply