⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 freqcomp.m

📁 MATLAB Functions for Multiple View Geometry
💻 M
字号:
% FREQCOMP - Demonstrates image reconstruction from Fourier components%% Usage:  recon = freqcomp(im, Npts, delay)%% Arguments:      im    - Image to be reconstructed.%                 Npts  - Number of frequency components to consider%                         (defaults to 50).%                 delay - Optional time delay between animations of the%                         reconstruction. If this is omitted the function%                         waits for a key to be pressed before moving to%                         the next component.%% Returns:        recon - The image reconstructed from the specified%                         number of components%% This program displays:%%    * The image.%    * The Fourier transform (spectrum) of the image with a conjugate%      pair of Fourier components marked with red dots.%    * The sine wave basis function that corresponds to the Fourier%      transform pair marked in the image above.  %    * The reconstruction of the image generated from the sum of the sine%      wave basis functions considered so far.% Copyright (c) 2002-2003 Peter Kovesi% School of Computer Science & Software Engineering% The University of Western Australia% http://www.csse.uwa.edu.au/% % Permission is hereby granted, free of charge, to any person obtaining a copy% of this software and associated documentation files (the "Software"), to deal% in the Software without restriction, subject to the following conditions:% % The above copyright notice and this permission notice shall be included in % all copies or substantial portions of the Software.%% The Software is provided "as is", without warranty of any kind.% March 2002 - Original version% April 2003 - General cleanup of codefunction recon = freqcomp(im, Npts, delay)        if ndims(im) == 3	im = rgb2gray(im);	warning('converting colour image to greyscale');    end        if nargin < 2	Npts = 50;    end        [rows,cols] = size(im);        % If necessary crop one row and/or column so that there are an even    % number of rows and columns, this makes things easier later.    if mod(rows,2) % odd	rows = rows-1;    end    if mod(cols,2) % odd	cols = cols-1;    end    im = im(1:rows,1:cols);    rc = fix(rows/2)+1;      % Centre point    cc = fix(cols/2)+1;    % The following code constructs two arrays of coordinates within the FFT    % of the image that correspond to complex conjugate pairs of points that    % spiral out from the centre visiting every frequency component on    % the way.    p1 = zeros(Npts,2);    % Path 1    p2 = zeros(Npts,2);    % Path 2        m = zeros(rows,cols);  % Matrix for marking visited points    m(rc,cc) = 1;    m(rc,cc-1) = 1;    m(rc,cc+1) = 1;            p1(1,:) = [rc cc-1];    p2(1,:) = [rc cc+1];        d1 = [0 -1];  % initial directions of the paths    d2 = [0  1];        % Mark out two symmetric spiral paths out from the centre (I wish I    % could think of a neater way of doing this)        for n = 2:Npts	l1 = [-d1(2) d1(1)];  % left direction	l2 = [-d2(2) d2(1)];			lp1 = p1(n-1,:) + l1; % coords of point in left direction	lp2 = p2(n-1,:) + l2;			if ~m(lp1(1), lp1(2)) % go left	    p1(n,:) = lp1;	    d1 = l1;	    m(p1(n,1), p1(n,2)) = 1; % mark point as visited	else  % go sraight ahead	    p1(n,:) = p1(n-1,:) + d1;	    m(p1(n,1), p1(n,2)) = 1; % mark point as visited	end	if ~m(lp2(1), lp2(2)) % go left	    p2(n,:) = lp2;	    d2 = l2;	    m(p2(n,1), p2(n,2)) = 1; % mark point as visited	else  % go sraight ahead	    p2(n,:) = p2(n-1,:) + d2;	    m(p2(n,1), p2(n,2)) = 1; % mark point as visited	end	    end        % Having constructed the path of frequency components to be visited    % we take the FFT of the image and then enter a loop that    % incrementally reconstructs the image from its components.        IM = fftshift(fft2(im));    recon = zeros(rows,cols);       % Initialise reconstruction matrix           if max(rows,cols) < 150	fontsze = 7;    else	fontsze = 10;    end        figure(1), clf    subplot(2,2,1),imagesc(im),colormap gray, axis image, axis off    title('Original Image','FontSize',fontsze);    subplot(2,2,2),imagesc(log(abs(IM))),colormap gray, axis image    axis off,   title('Fourier Transform + frequency component pair','FontSize',fontsze);        warning off % Turn off warnings that might arise if the images cannot be                % displayed full size    truesize(1)     for n = 1:Npts	  	  % Extract the pair of Fourier components	  F = zeros(rows,cols);	  F(p1(n,1), p1(n,2)) = IM(p1(n,1), p1(n,2));	  F(p2(n,1), p2(n,2)) = IM(p2(n,1), p2(n,2));	  	  	  % Invert and add  to reconstruction	  f = real(ifft2(fftshift(F)));	  recon = recon+f;	  	  % Display results	  subplot(2,2,2),imagesc(log(abs(IM))),colormap gray, axis image          axis off,  title('Fourier Transform + frequency component pair','FontSize',fontsze);	  hold on, plot([p1(n,2), p2(n,2)], [p1(n,1), p2(n,1)],'r.'); hold  off	  subplot(2,2,3),imagesc(recon),colormap gray, axis image, axis off, title('Reconstruction','FontSize',fontsze);	  subplot(2,2,4),imagesc(f),colormap gray, axis image, axis off	  title('Basis function corresponding to frequency component pair','FontSize',fontsze);	  	  if nargin == 3	      pause(delay);	  else	      fprintf('Hit any key to continue \n'); pause	  end	      end        warning on  % Restore warnings

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -