SNR图和矩形拟合(Matlab)

时间:2015-06-19 17:08:32

标签: matlab plot

  1. 我附加了3张图像和SNR函数来计算每张图像之间的SNR。我如何绘制这个SNR,以便从情节中理解水平而不仅仅是数字。
  2. SNR功能:

    % function to calculate the drop in SNR between Best focussed image to
    % slightly out of focus image. The value is presented in dB scale and amplitude
    %for comparison.
    % Terms:
    %%Signal image = best focussed image
    %%Noise image = slight off focussed image
    %%Dark scan = for future reference with respect to Signal image
    %---------------Define function to calcuate SNR---------------%
    function SNR = SNR(signal, noise, typ, noisy)
    % snr - calculate signal-to-noise ratio in decibel or amplitude
    %
    % Syntax: SNR = snr(signal, noise)
    %         SNR = snr(signal, signal_noise, typ, true)
    %
    % Inputs:
    %  signal - signal amplitude
    %   noise - noise amplitude or noisy signal
    %     typ - type of SNR (default:'db' to decibel or 'amp' to amplitude)
    %   noisy - eval noise flag (use noise as noisy signal)
    %
    % Outputs:
    %    SNR - Signal-to-Noise Ratio
    %
    % Example:
    %   dt = 0.01;
    %   T = 0:dt:10;
    %   sig = sin(2*pi*T);
    %   noisy = sig + (0 + .5 * randn(1,length(T)));   % error mean 0 and sd .5
    %   snr_db = snr(sig,noisy,'db',true)
    %
    % Other m-files required: none
    % Subfunctions: rms
    %------------------------------- BEGIN CODE -------------------------------
    if ~exist('typ', 'var')
        typ = 'db';
    end
    if ~exist('noisy', 'var')
        noisy = false;
    end
    
    if noisy % eval noise
        noise = signal-noise;
    end
    
    if strcmp(typ,'db')
        SNR = 20*log10(rms(signal)/rms(noise));
    elseif strcmp(typ,'amp')% string comparison for type value.
        SNR = rms(signal)/rms(noise);
    end
    end
    %-------------------------------- END CODE --------------------------------
    

    RMS功能

    function RMS= rms(varargin)
    %
    % Written by Phillip M. Feldman  March 31, 2006
    %
    % rms computes the root-mean-square (RMS) of values supplied as a
    % vector, matrix, or list of discrete values (scalars).  If the input is
    % a matrix, rms returns a row vector containing the RMS of each column.
    
    % David Feldman proposed the following simpler function definition:
    %
    %    RMS = sqrt(mean([varargin{:}].^2))
    %
    % With this definition, the function accepts ([1,2],[3,4]) as input,
    % producing 2.7386 (this is the same result that one would get with
    % input of (1,2,3,4).  I'm not sure how the function should behave for
    % input of ([1,2],[3,4]).  Probably it should produce the vector
    % [rms(1,3) rms(2,4)].  For the moment, however, my code simply produces
    % an error message when the input is a list that contains one or more
    % non-scalars.
    
    if (nargin == 0)
       error('Missing input.');
    end
    
    
    % Section 1: Restructure input to create x vector.
    
    if (nargin == 1)
       x= varargin{1};
    
    else
    
       for i= 1 : size(varargin,2)
          if (prod(size(varargin{i})) ~= 1)
             error(['When input is provided as a list, ' ...
                    'list elements must be scalar.']);
          end
    
          x(i)= varargin{i};
       end
    end
    
    
    % Section 2: Compute RMS value of x.
    
    RMS= sqrt (mean (x .^2) );
    

    脚本

    % sig= best focussed image
    % noisy= off focussed image
    % dark = no light image
    %-------------------------
    % calculate SNR between:
    % sig and noise
    % signal and dark
    % noise and dark
    clear
    sig = rgb2gray(imread('S1-BestFocus.bmp'));
    noisy = rgb2gray(imread('S1-OffFocus.bmp'));
    dark=rgb2gray(imread('DarkScan.bmp'));
    sig_noise = SNR(sig,noisy,'db',true);
    sig_dark = SNR(sig,dark,'db',true);
    noise_dark = SNR(noisy,dark,'db',true);
    

    图中: figures for calculation

    1. 我正在成像宽度为15-18微米,长度为1毫米的狭缝,狭缝不均匀,因此我必须检查沿狭缝长度的宽度变化多少。获得测量的最佳方法是什么? (一种方法是使用矩形拟合)。

0 个答案:

没有答案