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

Sobel filtering with 8s images?

nrw
Beginner
500 Views

Hi there,

I spent some time in the past couple of weeks porting an application from IPL to IPP, and am nearing completition. Most stuff that uses 8u (even RGB) and 16s images works, and mostly runs faster than the IPL version, but there are a few remaining problems with 8s. In particular, I still need a correct way to use the Sobel filters on 8s(grey)images.

There is no direct 8s filter, but there's one that apparently converts from the 8s source image to a 16s destination image "on the fly": ippFilterSobel...8s16s_C1R(). This yields a very grey looking image, though I can see that the filter had an effect. If I convert back to an 8s image by doing plain assignment of all 16s pixels to 8s ones, the image looks somewhat brighter, but still quite "wrong" and different from what the IPL version yields.

8s support in the IPP isn't as good as for 8u and 16s, so there is apparently also no direct conversion routine between 8s and most other image types. I'm thinking maybe I should convert differently?

My question to the experts (hello Vladimir ;-)) is: If you were to Sobel filter 8s images in IPP, how would you do it to obtain the same results as iplFixedFilter(IPL_SOBEL...) did in IPL? And if that is not possible, how could you make the resulting 16s image from ippFilterSobel...8s16s_C1R() look "right"? Using 16s images from the start is alastoption, but if at all possible, 8s would be better for my purposes.

Thanks for your time!

0 Kudos
3 Replies
nrw
Beginner
500 Views

I messed it up, bug in my code, shame on me. You can delete this thread.

Sorry.

0 Kudos
Vladimir_Dudnik
Employee
500 Views

Hello, I'm glad you solve issue. No need to delete this thread, it can help someone in case of similar issue

Regards,
Vladimir

0 Kudos
Intel_C_Intel
Employee
500 Views

Hi,

You are right the support of 8s data type in IPP is not so comprehensive as for 8u.IPP 5.1.1 and later versions contain fixed and separable convolutions with 8s C1 and C3 output. It is not competely the thing you are asking about but these functions facilitate filtering of 8s input images:

First, you change the left bit by ippiXor function

Then filter it by ippiFilterSobel***Border_8u8s_C1/3R function. The result will be same as for 8s data filtering because the sum of Sobel kernel elements is 0. Notethat ippiFilterSobelVertBorder_8u8s_C1R function calculates -dx (see the used kernel in the manual), for dx use ippiFilterSobelNegVertBorder_8u8s_C1R function

You can place request for filtering functions with 8s input on Intel Premier site (premier.intel.com)

Thanks,

Alexander

0 Kudos
Reply