Switch to side-by-side view

--- a
+++ b/fcnPseudoBmodeUltrasoundSimulator.m
@@ -0,0 +1,128 @@
+function [imageOut, rfEnvelope] = fcnPseudoBmodeUltrasoundSimulator(echoModel,f0,c,sigma_x,sigma_y,speckleVariance)
+
+% fcnPseudoBmodeUltrasoundSimulator generates a simulated Pseudo B-Mode
+%   Ultrasound image given the echogenicity model for the structure to be
+%   imaged.
+%
+%   OUTPUTIMAGE = fcnPseudoBmodeUltrasoundSimulator(ECHO_MODEL) generates
+%   the simulated B-Mode Ultrasound image using default parameter settings.
+%   The size of the simulated image is same as size of the echogenity
+%   matrix provided. The OUTPUTIMAGE is of type uint8. Supported classes
+%   for ECHO_MODEL are uint8, uint16, single, double.
+%   
+%   OUTPUTIMAGE = fcnPseudoBmodeUltrasoundSimulator(ECHO_MODEL, F_0, C,
+%   SIGMA_X, SIGMA_Y, SPECKLE_VARIANCE) generates the simulated B-Mode
+%   Ultrasound image using the specified parameters based on the ECHO_MODEL
+%   provided.
+%
+%       F_0 - Center frequency of the ultrasonic wave. Default valus is 10e6
+%       C - Velocity of sound in media (m/s). Default valus is 1540
+%       SIGMA_X - Pulse-width of transmitting ultrasonic wave. Default
+%       value is 2
+%       SIGMA_Y - Beam-width) of transmitting ultrasonic wave. Default
+%       value is 1.5
+%       SPECKLE_VARIANCE - Variance of Speckle distribution of the media.
+%       Default value is 0.01
+%
+%   [OUTPUTIMAGE, RF_ENVELOPE] = fcnBPDFHE(...) returns also the
+%   rf Envelope matrix for further usage.
+% 
+%   Details of the method are available in
+%
+%   Yongjian Yu, Acton, S.T., "Speckle reducing anisotropic diffusion," 
+%   IEEE Trans. Image Processing, vol. 11, no. 11, pp. 1260-1270, Nov 2002.
+%   [http://dx.doi.org/10.1109/TIP.2002.804276]
+%
+%   J. C. Bambre and R. J. Dickinson, "Ultrasonic B-scanning: A computer
+%   simulation", Phys. Med. Biol., vol. 25, no. 3, pp. 463479, 1980.
+%   [http://dx.doi.org/10.1088/0031-9155/25/3/006]
+%
+%   2011 (c) Debdoot Sheet, Indian Institute of Technology Kharagpur, India
+%       Ver 1.0   27 October 2011
+%
+% Example
+% -------
+% echoModel = imread('phantom.bmp');
+% outputImage = fcnPseudoBmodeUltrasoundSimulator(echoModel);
+% figure, subplot 121, imshow(echoModel,[]), subplot 122,
+% imshow(outputImage);
+%
+
+% 2011 (c) Debdoot Sheet, Indian Institute of Technology Kharagpur, India
+% All rights reserved.
+% 
+% Permission is hereby granted, without written agreement and without 
+% license or royalty fees, to use, copy, modify, and distribute this code 
+% (the source files) and its documentation for any purpose, provided that 
+% the copyright notice in its entirety appear in all copies of this code, 
+% and the original source of this code. Further Indian Institute of 
+% Technology Kharagpur (IIT Kharagpur / IITKGP)  is acknowledged in any
+% publication that reports research or any usage using this code. 
+% 
+% In no circumstantial cases or events the Indian Institute of Technology
+% Kharagpur or the author(s) of this particular disclosure be liable to any
+% party for direct, indirectm special, incidental, or consequential 
+% damages if any arising out of due usage. Indian Institute of Technology 
+% Kharagpur and the author(s) disclaim any warranty, including but not 
+% limited to the implied warranties of merchantability and fitness for a 
+% particular purpose. The disclosure is provided hereunder "as in" 
+% voluntarily for community development and the contributing parties have 
+% no obligation to provide maintenance, support, updates, enhancements, 
+% or modification.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Input argument support check
+iptcheckinput(echoModel,{'uint8','uint16','single','double'}, {'nonsparse','2d'}, mfilename,'I',1);
+
+if nargin == 1
+    f0 = 10e6;
+    c = 1540;
+    sigma_x = 2;
+    sigma_y = 1.5;
+    speckleVariance = 0.01;
+elseif nargin == 6
+    if f0 <= 0
+        error('Center frequency (f0) should be non-zero positive');
+    elseif c<=0
+        error('Velocity of sound (c) in media should be non-zero positive');
+    elseif sigma_x<=0
+        error('Pulse-width (sigma_x) of transmitting ultrasonic wave should be non-zero positive');
+    elseif sigma_y<=0
+        error('Beam-width (sigma_y) of transmitting ultrasonic wave should be non-zero positive');
+    elseif speckleVariance<=0
+        error('Variance of Speckle distribution (speckleVariance) of the media should be non-zero positive');
+    end
+else
+    error('Unsupported calling of fcnPseudoBmodeUltrasoundSimulator');
+end
+
+k0 = 2*pi*f0/c;
+
+[nRows nCols] = size(echoModel);
+
+echoModel = mat2gray(echoModel);
+
+G = rand([nRows nCols],'double');
+
+G = (G-mean(G(:)))*speckleVariance;
+
+
+
+
+T = double(echoModel).*G;
+
+x = -10*sigma_x:10*sigma_x; %-20 :20
+y = -10*sigma_y:10*sigma_y; %-15 :15
+
+hx = (sin(k0*x).*exp(-(x.^2)/(2*sigma_x^2)))';
+hy = exp(-(y.^2)/(2*sigma_y^2));
+
+V = imfilter(imfilter(T,hx),hy);
+
+Vcap = hilbert(V);
+
+Va = V + (1i*Vcap);
+
+rfEnvelope = abs(Va);
+imageOut = im2uint8(mat2gray(log10(rfEnvelope)));
\ No newline at end of file