Digital Image Processing, Phase offset

In summary, the conversation involved a student working on a MATLAB problem for a digital image processing class. The problem was to manipulate an image using a phase offset of pi radians in the Discrete Fourier Transform (DFT). The student encountered difficulties, but eventually realized that the negative pixel values in the resulting image were due to the phase offset. They also discussed various ways to interpret and display these negative values.
  • #1
Joshuarr
23
1

Homework Statement


I'm working on a Matlab problem for a digital image processing class. The problem is to take an image, then take its 2D-FFT and offset the phase component by pi. Then to take the IFFT of the new DFT using the unmodified magnitude and modified phase.

What I got was a matrix of all zeros! -- A black image.

I'm not sure if this is the correct result, so I'm here. I notice that when I slowly change the phase offset towards +Pi it fades out.

This is a specific problem, but what I really want to know is: In general, how does a phase offset of pi radians to the DFT phase component affect the original image?

Homework Equations





The Attempt at a Solution


superman is an image we were given for this assignment

Matlab Code:
superman = imread('superman.png')
supermanDFT = fft2(superman);
supPhase = wrapTo2Pi(angle(supermanDFT) +pi);
supMag = abs(supermanDFT);
newSupermanDFT = supMag.*exp(1i*supPhase);
newSuperman = ifft2(newSupermanDFT);
newSuperman = real(newSuperman);
imshow(uint8(newSuperman))

I checked the code by using no phase offset --basically decomposing the image into phase and magnitude reconstructing the DFT with newSupermanDFT = supMag.*exp(1i*supPhase); and taking the inverse and looking at the image. I got the original image as expected. This doesn't guarantee the code is correct, but I have no reason to think its wrong. I'm not really sure what the result should be. :(

Thanks for any help.
 
Physics news on Phys.org
  • #2
A MATLAB problem

So, after playing with it some more, I've realized that the result of the ifft2 are negative. And after typecasting them to uint8, they all go to zero. I thought that Matlab would interpret them as the binary 2s complement representation and then give the corresponding uint8. Guess I expected too much!

Still not sure how to make it do what I want, but I'll probably figure it out soon!
 
  • #3
Joshuarr said:
So, after playing with it some more, I've realized that the result of the ifft2 are negative.
Good! :smile: I haven't verified your code, but if you are describing what I think you're describing, it seems to be working.

If you're curious as to why pixel values are becoming negative, remember that the Discrete Fourier Transform (DFT) and the Inverse DFT (IDFT) are linear operators.

If operator [itex] \mathcal{O} [/itex] and its inverse [itex] \mathcal{O}^{-1} [/itex] are linear, and we define [itex] X = \mathcal{O}\{x\} [/itex] and [itex] x = \mathcal{O}^{-1}\{X\} [/itex],

then if we multiply the input by a constant [itex] A [/itex] the output is the same as it othwise would be, except also multiplied by [itex] A [/itex]. In other words, [itex] \mathcal{O}\{Ax\} = AX [/itex] and [itex] \mathcal{O}^{-1}\{AX\} = Ax [/itex]. This is a property of linear operators: You can pull constants out from the input, similar to pulling a constant out from under the integral (and that's only because integrals are linear operators too!)

Keep in mind that [itex] A [/itex] can be any complex constant. It doesn't have to be a real number (although it could be).

To shift the phase of a complex number by [itex] \theta [/itex], one multiplies that number by [itex] e^{i \theta} [/itex].

Given everything that I've described above, what is [itex] \mathcal{F}^{-1} \{e^{i \pi} X \} [/itex]?

What is [itex] e^{i \pi } [/itex]? :wink:

And after typecasting them to uint8, they all go to zero. I thought that Matlab would interpret them as the binary 2s complement representation and then give the corresponding uint8. Guess I expected too much!

Still not sure how to make it do what I want, but I'll probably figure it out soon!

Does the assignment specify how you are to interpret greyscale pixels with negative values? If the original pixel values are greyscale with 8-bit resolution, then each pixel has a range from 0 to 255. Negative numbers are outside this range. You need to figure out how they should be interpreted.

One idea is to simply display the absolute value of each pixel value. You should be able to add an additional line of code simply enough to do this. [And remove the "newSuperman = real(newSuperman);" line].

Are you supposed to keep the exact same bit positions for this? By that I mean, -1 (decimal) = 0b11111111 (8-bit, 2's complement), 0b11111111 (8-bit, unsigned) = 255 (decimal). For this, if the number is less than 0, add 256 to it before typecasting it to uint8.

Or are you supposed to interpret it some other way? If you don't know, you might wish to ask your instructor before proceeding.
 
Last edited:
  • Like
Likes 1 person
  • #4
[tex]\mathcal{F}^{-1} \{e^{i \pi} X \}=e^{i \pi}\mathcal{F}^{-1}\{X\} = -\mathcal{F}^{-1}\{X\}[/tex]

That explains the negative. I wasn't sure about the representation we were supposed to use, but I'm going to assume that he doesn't want to look at a black block. lol.

This is what I wrote for my "Analysis" section of the homework:

Analysis: The phase offset of 180 degrees seems to have inverted (flipped the bits) of the image. This makes sense since changing the phase by 180 degrees introduces a negative sign for sinusoids. e.g. sin(x+180 deg) = -sin(x). Thus, the highest values become the lowest values and vice-versa.

In my code:
newSuperman = ifft2(newSupermanDFT);
newSuperman = real(newSuperman);
newSuperman = uint8(abs(newSuperman));
newSuperman = bitcmp(newSuperman)+1;

I take the real part of the result of the ifft2 because it's not supposed to have any imaginary components (since it's an image). If any parts of the image are imaginary, we can attribute it to rounding error.

newSuperman is a matrix of type double complex. So I took the abs value, as you suggested, and then turned it into a matrix of uint8. The I took the 2s complement of the absolute values to get the negative representation (but Matlab still interprets it as uint8) -- which is what I wanted all along.

It's not strictly the inverse, since the 2s complement of a binary number is the complement of the bits + 1. I assume adding 1 to the binary number changes the values very little though.

I'm not sure that this is all correct, but it all seems to make more sense.

Thanks for your help!
 
  • #5
I think in this case, what is correct and not correct is up to your instructor. It comes down to how your instructor wants you to represent pixel values outside the normal range of 8-bit greyscale pixel values (0 to 255). Should you map them? Truncate them? It's up to your instructor.

By the way, for what it's worth, Matlab's imshow() function is pretty flexible on how this is handled. There are many possible ways to approach it. The "correct" way is up to your instructor.

http://www.mathworks.com/help/images/ref/imshow.html
 
  • #6
You're right. He says I should use the full-scale contrast stretch (FSCS) (which I developed in a previous problem) It's a linear mapping that takes the minimum value to 0 and the maximum value of the image to 255 (the maximum gray-level value in the range). The image was inverted again. So it seems to work! in fact, it should be identical to what I did, since this is basically multiplication by -1, which I did by taking the 2s complement.

Thanks for your help again. I appreciate it.

Josh
 
  • #7
Well, it's not identical. It is off by 1. haha. Almost. ;)
 
  • #8
Joshuarr said:
You're right. He says I should use the full-scale contrast stretch (FSCS) (which I developed in a previous problem) It's a linear mapping that takes the minimum value to 0 and the maximum value of the image to 255 (the maximum gray-level value in the range).
If it's any help, it sounds like the correct interpretation is such that the final image is not the same as the original, non-phase-shifted image. (Hint: when dealing with negative values, think of the noun "Negative," -- like in photography.)

Given your description of your FSCS purpose, then -255 should get mapped to 0, and 0 should get mapped to 255.

(The minimum value in the pre-mapped, phase-shifted image can be as low as -255. And you mentioned that the minimum value gets mapped to 0. Similarly, 0 should be the maximum value in the pre-mapped, phase-shifted image.)

It doesn't sound to me like you should be taking the 2's complement.

[Edit: At least that's my guess anyway. As I mentioned, the "correct" way is up to your instructor, regardless of my guesses.]
 

1. What is digital image processing?

Digital image processing is the use of computer algorithms to manipulate and enhance digital images. This can include tasks such as image restoration, enhancement, and segmentation.

2. What is phase offset in digital image processing?

Phase offset refers to the difference in phase between two signals. In the context of digital image processing, it can refer to the difference in phase between the original image and the processed image.

3. How is phase offset used in digital image processing?

Phase offset can be used in digital image processing to correct for any distortion or misalignment in the original image. This can improve the quality and accuracy of the processed image.

4. What are some common techniques for dealing with phase offset in digital image processing?

Some common techniques for dealing with phase offset include phase correlation, phase unwrapping, and phase shifting. These techniques can help to align and correct for any phase differences between images.

5. Can phase offset be completely eliminated in digital image processing?

While techniques like phase unwrapping can help to minimize phase offset, it is difficult to completely eliminate it. This is because phase offset can be caused by various factors such as noise, distortion, and misalignment, which are inherent in digital images.

Similar threads

  • MATLAB, Maple, Mathematica, LaTeX
Replies
4
Views
3K
  • Engineering and Comp Sci Homework Help
Replies
2
Views
3K
  • Programming and Computer Science
Replies
8
Views
2K
  • Engineering and Comp Sci Homework Help
Replies
1
Views
1K
  • MATLAB, Maple, Mathematica, LaTeX
Replies
1
Views
737
  • MATLAB, Maple, Mathematica, LaTeX
Replies
1
Views
2K
  • MATLAB, Maple, Mathematica, LaTeX
Replies
2
Views
2K
  • MATLAB, Maple, Mathematica, LaTeX
Replies
1
Views
2K
  • Engineering and Comp Sci Homework Help
Replies
2
Views
9K
  • MATLAB, Maple, Mathematica, LaTeX
Replies
3
Views
1K
Back
Top