convolution of two image in frequency domain?

조회 수: 5 (최근 30일)
TULIKA
TULIKA 2014년 8월 23일
댓글: Image Analyst 2021년 12월 13일
x= 1:150;y=1:150;
[p,q]=freqspace(150);
[X,Y]=meshgrid(p,q);
R=(X.^2 + Y.^2);
Lambda=633*10^-9;
dis=10*10^-3;
F = (exp(i.*pi.*R))./(Lambda.*dis);
kernel = imag(F); % Gray scale image = imaginary part.
mesh(kernel);
axis square
imshow(kernel, []);
axis on;
colormap(gray(256));
rgbImage = imread('image.jpg');
imshow(rgbImage);
axis on;
% R=rgbImage(:,:,1);
% G=rgbImage(:,:,2);
% B=rgbImage(:,:,3);
grayImage = rgb2gray(rgbImage);
imshow(grayImage, []);
axis on;
grayImage1=fft2(double(grayImage));
kernel1=fft2(kernel);
Imagef=kernel*grayImage1;
Imagefinal=ifft2(Imagef);
imshow(Imagefinal, []);
axis on;
This code has no errors. Its output should be like a hazy image of concentrating circle or may be overlapped, but it shows hazy straight line. Please help.
  댓글 수: 2
Linas Svilainis
Linas Svilainis 2021년 12월 13일
Are you sure this code has no erros? kernel1=fft2(kernel);
BUT
Imagef=kernel*grayImage1;
NOT kernel1?
Why * not .*?
Image Analyst
Image Analyst 2021년 12월 13일
@Linas Svilainis I think they meant to say "This code has errors." The problem is to multiply the spectrum of a kernel times a spectrum of a filter, you'd need to use .* (dot star) instead of *, and you'd need to make sure they both have the same size (number of pixels).

댓글을 달려면 로그인하십시오.

채택된 답변

Image Analyst
Image Analyst 2014년 8월 23일
See my demos, attached. They're good examples that show you how it's done. Once you understand and run those I have no doubt you will be able to do the same thing with your image and kernel.
  댓글 수: 13
TULIKA
TULIKA 2014년 8월 25일
this is the program what I've written last and got this output
x= 1:256;y=1:256;
[p,q]=freqspace(256);
[X,Y]=meshgrid(p,q);
R=(X.^2 + Y.^2);
Lambda=633*10^-9;
dis=10*10^-3;
F = (exp(i.*pi.*R))./(Lambda.*dis);
kernel = imag(F); % Gray scale image = imaginary part.
mesh(kernel);
axis square
imshow(kernel, []);
axis on;
colormap(gray(256));
rgbImage = imread('image.jpg');
imshow(rgbImage);
axis on;
% R=rgbImage(:,:,1);
% G=rgbImage(:,:,2);
% B=rgbImage(:,:,3);
grayImage = rgb2gray(rgbImage);
imshow(grayImage, []);
axis on;
fftOriginal = fft2(double(grayImage));
shiftedFFT = fftshift(fftOriginal);
frequencyimage=fftshift(fft2(kernel));
imagef=shiftedFFT.*frequencyimage;
subplot(2,3,1);
imshow(imagef, []);
title('fft of image');
imagefinal=ifft2(fftshift(imagef));
image3=real(imagefinal);subplot(2,3,2);
imshow (image3, []);
title('real part of image');
image3=imag(imagefinal);subplot(2,3,3);
imshow (image4, []);
title('imaginary part of image');
Warning: Displaying real part of complex input.
> In imuitools\private\imageDisplayValidateParams>validateCData at 149
In imuitools\private\imageDisplayValidateParams at 31
In imuitools\private\imageDisplayParseInputs at 79
In imshow at 199
Image Analyst
Image Analyst 2014년 8월 25일
This is one situation where clear all is good. See how you were able to display image4? But you never defined image4, so where did that image4 come from? Not from this running of the program. It must have existed already. Who knows how many other times this happened with other variables. Either call clear all or put it in the front of your script.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Image Processing Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by