3
$\begingroup$

I'm trying to recreate a gassuain pyramid using the following scales:

enter image description here

There seems to be two concepts used here:

1) When an image is halved, applying a gaussian kernel of σ will apply as 2σ.

2) When an image has a scale of σ, and a gaussian kernel of σ is applied, then the resulting image will have a scale of sqrt(2)*σ.

So when I'm constructing the above scale space, I do the following:

enter image description here

Where the sigmas shown are the sigma of the gaussian kernel applied to the image at the specified scale.

I implemented this in matlab with:

for i = 0:3 % Cycle over octaves - 4 total                    
    for j = 0:4 % Cycle over scales - 5 total
        if(i == 0 && j == 0)
            % This is the first octave and first octave
            obj.gaussianpyramid{i+1,j+1} = blob_class_image.filt_gaussian(obj.gs,1/sqrt(2));
        elseif(i > 0 && j == 0)
            % This is the first scale after the first
            % octave, take 3rd image from previous row
            obj.gaussianpyramid{i+1,j+1} = obj.gaussianpyramid{i,3}(1:2:end,1:2:end);
        else
            % These are second + scales. Take image from
            % previous column and apply the same scale
            obj.gaussianpyramid{i+1,j+1} = blob_class_image.filt_gaussian(obj.gaussianpyramid{i+1,j},sqrt(2)^(j-2));   

            % Store logpyramid
            obj.logpyramid{i+1,j} = obj.gaussianpyramid{i+1,j+1} - obj.gaussianpyramid{i+1,j};
        end                        
    end
end

Is this the correct line of thinking? I've implemented this and when I look at the laplacian of guassian pyramid, it seems to skip over some scales.

EDIT: After some tests it appears I'm not able to implement #2) listed above, where two guassian convolutions with σ is the same as a single guassian convolution with sqrt(2)*σ. When I test it out and then substract the images, they are not the same...

EDIT2: Also made a small mistake on calculating the sigmas. The above idea should be correct now. I double checked by comparing the scale obtained at σ = 22.627 by convolving the original image with a gaussian kernel of σ = 22.627 and then down sampling and comparing the two images and they appear to be the same.

$\endgroup$
  • $\begingroup$ I think I was doing something stupid, in that with MATLAB you specify the window size of the guassian kernel, I think I had the windowsize set as a function of sigma which resulted in a even integer and thus did not center the gaussian kernel correctly. $\endgroup$ – Justin Aug 11 '13 at 18:14
  • $\begingroup$ Yep, I fudged with the generation of the kernel. I'll leave this question here anyway just incase someone else makes the same mistake as I did. $\endgroup$ – Justin Aug 11 '13 at 19:18
  • $\begingroup$ It would be helpful if you posted your fix as an answer. $\endgroup$ – Phonon Aug 12 '13 at 20:43
  • $\begingroup$ Could you explain exactly what are you trying to do? $\endgroup$ – Royi Jan 12 '15 at 9:04
  • $\begingroup$ @Drazick I was trying to make a gaussian pyramid for a sift routine I wrote. I noticed my results look a little off so I asked if what I was doing was correct. It turns out my thought process was correct but I was making an implementation error by using a non-odd dimenioned kernel in a Matlab convolution routine, so the solution was basically completely irrelevant to my question. $\endgroup$ – Justin Jan 12 '15 at 23:19

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.