Take the 2-minute tour ×
Signal Processing Stack Exchange is a question and answer site for practitioners of the art and science of signal, image and video processing. It's 100% free, no registration required.

I'm trying to determine what "filter" has been applied to an image. I have the original, raw image and the processed image. The processed image has been put through a pipeline (black box) that does various things to the image in an iterative manner.

The filter, as far as I can tell, is similar to an unsharp-mask, but with "negative bowls" mitigated. However, the processed image cannot be reproduced by a simple unsharp mask.

I've attempted to measure the "filter function" by taking the ratio of the power spectra of the raw and unprocessed images, but the best I've been able to do with that is unsharp mask with a non-gaussian smoothing function.

What methods are available for determining the filter applied to an image?

(not related to Determining the type of filter on an image)

share|improve this question
3  
One big factor to consider is whether the unknown filter is linear or non-linear. –  Paul R Dec 28 '12 at 13:39
    
Can you provide original and filtered images? Do you want to determine a particular filter or a class of filters? –  Libor Jan 1 '13 at 16:32
add comment

2 Answers

up vote 2 down vote accepted

If you have a "black box" filter, you can gain more knowledge about it by providing sets of synthetic images and then inspect changes in some of the following:

  • spatial domain
  • frequency domain
  • gradient domain and edges
  • histogram
  • response curve
  • pixel-pixel differences

If you know that the filter uses convolution, a method of blind deconvolution may be helpful.

share|improve this answer
    
Good answer. However, I think that blind convolution is suited for harder problem - when you don't know the kernel and the original signal. Here you have the original signal, the result signal, and you need to find only the kernel. This can be done using a simple LS procedure. –  Andrey Jan 1 '13 at 16:47
add comment
  • In case your filter is linear, this should be quite easy. You have a linear model with unknown parameters (9 if your support is 3x3, 16 if 4x4, etc...). You have a lot of constraints - the original image and result image. You can use linear least squares. If you can generate any input, it is even easier. Recall that a linear time-invariant system is fully determined by its response to delta impulse, which is its kernel.

  • In case your filter is not linear (like Paul says), there is almost nothing that you can do to find it out, except using your common sense, or attempting to optimize another model, given your inputs and outputs. Image processing logic can be very non-linear, including ad-hoc solutions, so it looks quite hard to me.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.