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

ippiDeconvLR

Adriaan_van_Os
New Contributor I
866 Views

I get nice results wit large numbers of iterations of ippiDeconvLR. However, because of the large number of iterations, it takes a long time and triggers the following questions:

1. User-friendly software implies that the user can stop (and is informed about) lengthy operations. So, how do I interrupt ippiDeconvLR ? Run it in a separate thread and then kill the thread ? Seems rather crude (and an invitation to memory leaks).

2. Is ippiDeconvLR threaded internally ? Threading it externally simply by tiling, is not possible, see https://lmb.informatik.uni-freiburg.de/Publications/2010/Tem10a/LucyRichardsonDeconvolution.pdf

Sincerely,

Adriaan van Os

0 Kudos
6 Replies
Adriaan_van_Os
New Contributor I
866 Views
Additional question about ippiDeconvLR. 3. Is N times ippiDeconvLR(with M iterations) equal to 1 time ippiDeconvLR(with M*N iterations) when using the same pDeconvLR state record ? Sincerely, Adriaan van Os
0 Kudos
Gennady_F_Intel
Moderator
866 Views

you are right, the IPP's API doesn't allow a user to interrupt the computation till the very end.

ippiDeconvLR is not threaded internally.

 

0 Kudos
Adriaan_van_Os
New Contributor I
866 Views

Then I have to reimplement ippiDeconvLR in application code as it does give good results, but is unpractical to use.

What LR method uses ippiDeconvLR ? Additive or multiplicative ? See e.g. https://www.strollswithmydog.com/richardson-lucy-algorithm for the difference.

Regards,

Adriaan van Os

0 Kudos
Adriaan_van_Os
New Contributor I
866 Views

In the mean time, I implemented the multiplicative Lucy-Richardson iteration in application code. Unlike ippiDeconvLR, it is interruptible and fully threaded. And faster.

Also, it doesn't suffer from edge effects, as in attached photo. The way that Intel can fix the edge artifacts in ippiDeconvLR is by changing the border type used internally from ippBorderConst to ippBorderRepl or ippBorderMirror. That is, I get the same edge artifacts if I use ippBorderConst and changing it to ippBorderRepl or ippBorderMirror fixes the problem.

Regards,

Adriaan van Os

0 Kudos
Ruqiu_C_Intel
Moderator
866 Views

Hello Andriaan van Os,

Thank you for diving into research IPP functionalities and sent out your comments! We will investigate ippiDeconvLR internally, and back to here if there is any update.

Best Regards,

Ruqiu

0 Kudos
Adriaan_van_Os
New Contributor I
866 Views

Depending on the passed  kernel, the actual number of Lucy-Richardson iterations - before the quality of the resulting image starts to decrease - is between 1 and 10000. I don't see how this number can be known beforehand. Therefore, the number of iterations must be steerable, either by the user or by an automated assessment algorithm. In other words, a Lucy-Richardson iteration is useless, unless it is actually stoppable and continuable.

Regards,

Adriaan van Os

 

0 Kudos
Reply