<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="bbPress/1.0.2" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>k-Wave User Forum &#187; Topic: Simulate a diagnostic ultrasound brain image</title>
		<link>http://www.k-wave.org/forum/topic/simulate-a-diagnostic-ultrasound-brain-image</link>
		<description>Support for the k-Wave MATLAB toolbox</description>
		<language>en-US</language>
		<pubDate>Wed, 13 May 2026 00:09:07 +0000</pubDate>
		<generator>http://bbpress.org/?v=1.0.2</generator>
		<textInput>
			<title><![CDATA[Search]]></title>
			<description><![CDATA[Search all topics from these forums.]]></description>
			<name>q</name>
			<link>http://www.k-wave.org/forum/search.php</link>
		</textInput>
		<atom:link href="http://www.k-wave.org/forum/rss/topic/simulate-a-diagnostic-ultrasound-brain-image" rel="self" type="application/rss+xml" />

		<item>
			<title>Bradley Treeby on "Simulate a diagnostic ultrasound brain image"</title>
			<link>http://www.k-wave.org/forum/topic/simulate-a-diagnostic-ultrasound-brain-image#post-5480</link>
			<pubDate>Fri, 29 Apr 2016 10:42:48 +0000</pubDate>
			<dc:creator>Bradley Treeby</dc:creator>
			<guid isPermaLink="false">5480@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi Marlene,&#60;/p&#62;
&#60;p&#62;I'm not sure what you mean by &#34;neural ultrasound probe&#34;? I would suggest looking at the manufacturers specifications or in the literature to find the relevant properties.&#60;/p&#62;
&#60;p&#62;Brad.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>marlenep on "Simulate a diagnostic ultrasound brain image"</title>
			<link>http://www.k-wave.org/forum/topic/simulate-a-diagnostic-ultrasound-brain-image#post-5470</link>
			<pubDate>Fri, 15 Apr 2016 15:55:06 +0000</pubDate>
			<dc:creator>marlenep</dc:creator>
			<guid isPermaLink="false">5470@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Thank you for your suggestions, now the simulation is working but I need to adjust the transducer input signal in order to obtain more realistic results. Can you suggest me how to create a proper pulse as similar as possible to the one generated from neural ultrasound probes? I think I should use a frequency around 6MHZ but I don't know how to set the duration and the other parameters. &#60;/p&#62;
&#60;p&#62;Marlene
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Bradley Treeby on "Simulate a diagnostic ultrasound brain image"</title>
			<link>http://www.k-wave.org/forum/topic/simulate-a-diagnostic-ultrasound-brain-image#post-5420</link>
			<pubDate>Wed, 16 Mar 2016 16:20:02 +0000</pubDate>
			<dc:creator>Bradley Treeby</dc:creator>
			<guid isPermaLink="false">5420@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi Marlene,&#60;/p&#62;
&#60;p&#62;Did you also change the strength of the scattering in each region, i.e., the size of the variation introduced by adding the random scattering map to the ambient properties? In general, the features (speckle) that you see in the simulated B-mode image will depend on the number (or in this case strength) of the scatterers.&#60;/p&#62;
&#60;p&#62;Brad.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>marlenep on "Simulate a diagnostic ultrasound brain image"</title>
			<link>http://www.k-wave.org/forum/topic/simulate-a-diagnostic-ultrasound-brain-image#post-5393</link>
			<pubDate>Sun, 21 Feb 2016 13:49:44 +0000</pubDate>
			<dc:creator>marlenep</dc:creator>
			<guid isPermaLink="false">5393@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Thank you Brad for the help.&#60;/p&#62;
&#60;p&#62;I obtain something very similar to your examples of the B mode ultrasound with the ball volumes but I don't understand why if for example I try to invert the properties (speed of sound and density) of the propagation medium with the properties I have inside the ball volumes I obtain more or less the same image .  I think I should obtain  an image with inverted colors but it doesn't happen even if the scattering phantom that appears has inverted colors. Is it normal ?
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Bradley Treeby on "Simulate a diagnostic ultrasound brain image"</title>
			<link>http://www.k-wave.org/forum/topic/simulate-a-diagnostic-ultrasound-brain-image#post-5384</link>
			<pubDate>Tue, 16 Feb 2016 02:02:37 +0000</pubDate>
			<dc:creator>Bradley Treeby</dc:creator>
			<guid isPermaLink="false">5384@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi Marlene,&#60;/p&#62;
&#60;p&#62;(1) To create a realistic looking ultrasound image in k-Wave, you need to define some number of sub-wavelength scatterers. These will produce the speckle pattern characteristic of ultrasound images. There are many ways you could do this. In this k-Wave example, the approach is very simplistic - Gaussian random noise is used to perturb the mean sound speed and density values. It's certainly possible to use other distributions, or point scatterers (see e.g., &#60;a href=&#34;http://scitation.aip.org/content/aip/proceeding/aipcp/10.1063/1.4934438&#34;&#62;this paper&#60;/a&#62;). The limits of 1400 and 1600 are used to restrict the values to physically relevant values in soft tissue.&#60;/p&#62;
&#60;p&#62;(2) You should use the values from the layer in which the ultrasound transducer is defined.&#60;/p&#62;
&#60;p&#62;(3) The time gain compensation is a simple exponential compensation of the form exp(-alpha * f * d), where alpha is the attenuation coefficient in dB/(MHz cm). Assuming y = 1, then alpha in this formula would be medium.alpha_coeff.&#60;/p&#62;
&#60;p&#62;Hope that helps,&#60;/p&#62;
&#60;p&#62;Brad.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>marlenep on "Simulate a diagnostic ultrasound brain image"</title>
			<link>http://www.k-wave.org/forum/topic/simulate-a-diagnostic-ultrasound-brain-image#post-5361</link>
			<pubDate>Sat, 16 Jan 2016 14:53:00 +0000</pubDate>
			<dc:creator>marlenep</dc:creator>
			<guid isPermaLink="false">5361@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi Brad,&#60;/p&#62;
&#60;p&#62;first of all thank you very much for the detailed answers . I finally managed,with your help, to see  something meaningful in my simulation .&#60;/p&#62;
&#60;p&#62;I'm sorry to bother you again but I still have some doubts relative to the example &#34; b -mode ultrasound image simulation&#34; :&#60;/p&#62;
&#60;p&#62;1 ) I do not understand this part of the code in which you defined a random distribution of scatterers for the region inside the ball . The value 75 is the new standard deviation ? Why c0 is bound between 1400 and 1600 ?&#60;/p&#62;
&#60;p&#62;% define a random distribution of scatterers for the highly scattering&#60;br /&#62;
% region&#60;br /&#62;
scattering_map = randn([Nx_tot, Ny_tot, Nz_tot]);&#60;br /&#62;
scattering_c0 = c0 + 25 + 75*scattering_map; %???????? è media più deviazione standard di 75?&#60;br /&#62;
scattering_c0(scattering_c0 &#38;gt; 1600) = 1600;&#60;br /&#62;
scattering_c0(scattering_c0 &#38;lt; 1400) = 1400;&#60;br /&#62;
scattering_rho0 = scattering_c0/1.5;&#60;/p&#62;
&#60;p&#62;2)&#60;br /&#62;
 In my simulation I have several regions that simulate the different layers of the brain , each with its acoustic properties . In this case it is fair to attribute the properties of the outermost layer , (the closest to the translator ) to medium parameter c0 and rho ?&#60;/p&#62;
&#60;p&#62;3)The absorption parameters correspond to modelling power law absorption of the form&#60;br /&#62;
&#60;br /&#62;
alpha = alpha_0*f^y, where &#60;/p&#62;
&#60;p&#62;alpha_0=  medium.alpha_coeff&#60;br /&#62;
 y =medium.alpha_power&#60;/p&#62;
&#60;p&#62;tgc_alpha is supposed to be the alpha of the formula?&#60;/p&#62;
&#60;p&#62;thank you very much
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Bradley Treeby on "Simulate a diagnostic ultrasound brain image"</title>
			<link>http://www.k-wave.org/forum/topic/simulate-a-diagnostic-ultrasound-brain-image#post-5357</link>
			<pubDate>Wed, 13 Jan 2016 16:35:44 +0000</pubDate>
			<dc:creator>Bradley Treeby</dc:creator>
			<guid isPermaLink="false">5357@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi Marlene,&#60;/p&#62;
&#60;p&#62;(1) For defining the source, you should use the value of the sound speed and density at the position of the ultrasound transducer. This step is necessary as in the example the input signal is defined in units of pressure, whereas the input must defined in units of velocity.&#60;/p&#62;
&#60;p&#62;(2) For the post-processing and visualisation, did you try using the code included in the example?&#60;/p&#62;
&#60;p&#62;(3) For time gain compensation, the method used is very simple, and assumes a single value for attenuation. More advances methods are certainly possible (I'll leave it to you to search the literature), but these are not included in the toolbox.&#60;/p&#62;
&#60;p&#62;Brad.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>marlenep on "Simulate a diagnostic ultrasound brain image"</title>
			<link>http://www.k-wave.org/forum/topic/simulate-a-diagnostic-ultrasound-brain-image#post-5345</link>
			<pubDate>Sat, 12 Dec 2015 14:43:06 +0000</pubDate>
			<dc:creator>marlenep</dc:creator>
			<guid isPermaLink="false">5345@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi everybody!&#60;/p&#62;
&#60;p&#62;I would like to ask you some questions about the simualtion of ultrasound B-mode images starting from 'Simulating B-mode Ultrasound Images Example&#34;. &#60;/p&#62;
&#60;p&#62;I have tried to reproduce it using only one ball . In my example the ball demarcates a region containing Cerebral Spinal Fluid so I define the typical density and speed of sound inside that region equal to --&#38;gt; density:1007 and speed of sound:1504.5;&#60;br /&#62;
Outside the ball I imagine having the properties of brain tissue so: speed of sound:1546.3  and Density :1046.&#60;/p&#62;
&#60;p&#62;as regards the remaining part of the code I tried to follow the example provided.&#60;/p&#62;
&#60;p&#62;My questions are :&#60;/p&#62;
&#60;p&#62;1 ) I am not sure of having correctly selected all the parameters , in particular, I have a matrix that defines me the speed of sound in the medium and one that defines the density but when I create the input signal is required the use of a single value. In my example I used the maximum speed of sound value and the minimum density value inside the matrices but I'm not sure  if it is correct .&#60;/p&#62;
&#60;p&#62;this line : input_signal = (source_strength./(1546.3*1007)).*input_signal;&#60;/p&#62;
&#60;p&#62;2 ) I do not know how to properly plot the resulting image . I tried to download the &#34;scan_lines  matrix &#34; provided at the start of the example  to figure out how to get the final image of the three balls but I do not get anything recognizable , i suppose something is wrong in my postprocessing.&#60;/p&#62;
&#60;p&#62;3 ) the value of the attenuation coefficient alpha should be different between the two regions (inside and outside the ball ) or it should be a scalar , for example a mean value?&#60;/p&#62;
&#60;p&#62;I put my code here :&#60;/p&#62;
&#60;p&#62;Thank you very much for any help and suggestion.&#60;/p&#62;
&#60;p&#62;clear all&#60;br /&#62;
clc&#60;br /&#62;
close all&#60;/p&#62;
&#60;p&#62;% simulation settings&#60;br /&#62;
DATA_CAST = 'single';&#60;/p&#62;
&#60;p&#62;% create the computational grid&#60;br /&#62;
Nx = 100;&#60;br /&#62;
Ny = 20;&#60;br /&#62;
Nz=40;&#60;/p&#62;
&#60;p&#62;% number of grid points in the y (column) direction&#60;br /&#62;
dx = 0.1e-3;        % grid point spacing in the x direction  [m]&#60;br /&#62;
dy = 0.1e-3;        % grid point spacing in the y direction  [m]&#60;br /&#62;
dz=0.1e-3;&#60;br /&#62;
kgrid = makeGrid(Nx, dx, Ny,dy,Nz,dz);&#60;/p&#62;
&#60;p&#62;object=makeBall(Nx, 100, Nz, Nx/2, Ny/2, Nz/2, 10, true);&#60;/p&#62;
&#60;p&#62;medium.sound_speed = 1546.3*ones(Nx,100,Nz); % [m/s]&#60;br /&#62;
medium.density = 1046*ones(Nx,100,Nz); % [kg/m^3]&#60;/p&#62;
&#60;p&#62;medium.sound_speed(object==1)=1504.5; %inside the ball&#60;br /&#62;
medium.density(object==1) =1007;&#60;/p&#62;
&#60;p&#62;% define properties of the input signal&#60;br /&#62;
source_strength = 1e6; % [Pa]&#60;br /&#62;
tone_burst_freq = 0.5e6; % [Hz]&#60;br /&#62;
tone_burst_cycles = 5;&#60;/p&#62;
&#60;p&#62;% create the time array&#60;/p&#62;
&#60;p&#62;% kgrid.t_array = makeTime(kgrid, medium.sound_speed, [], t_end);&#60;br /&#62;
[kgrid.t_array, dt] = makeTime(kgrid, medium.sound_speed);&#60;/p&#62;
&#60;p&#62;% create the input signal using toneBurst&#60;br /&#62;
input_signal = toneBurst(1/kgrid.dt, tone_burst_freq, tone_burst_cycles);&#60;/p&#62;
&#60;p&#62;% scale the source magnitude by the source_strength divided by the&#60;br /&#62;
% impedance (the source is assigned to the particle velocity)&#60;br /&#62;
input_signal = (source_strength./(1546.3*1007)).*input_signal;&#60;/p&#62;
&#60;p&#62;plot(input_signal);&#60;/p&#62;
&#60;p&#62;% append input signal used to drive the transducer&#60;br /&#62;
transducer.input_signal = input_signal;&#60;/p&#62;
&#60;p&#62;% physical properties of the transducer&#60;/p&#62;
&#60;p&#62;transducer.number_elements =19;    % total number of transducer elements&#60;br /&#62;
transducer.element_width = 1;       % width of each element [grid points]&#60;br /&#62;
transducer.element_length = 8;     % length of each element [grid points]&#60;br /&#62;
transducer.element_spacing = 0;     % spacing (kerf width) between the elements [grid points]&#60;br /&#62;
transducer.radius = inf;            % radius of curvature of the transducer [m]&#60;/p&#62;
&#60;p&#62;% calculate the width of the transducer in grid points&#60;/p&#62;
&#60;p&#62;transducer_width = transducer.number_elements*transducer.element_width ...&#60;br /&#62;
    + (transducer.number_elements - 1)*transducer.element_spacing;&#60;/p&#62;
&#60;p&#62;% use this to position the transducer in the middle of the computational grid&#60;/p&#62;
&#60;p&#62;transducer.position = round([1, Ny/2 - transducer_width/2, Nz/2 - transducer.element_length/2]);&#60;/p&#62;
&#60;p&#62;% properties used to derive the beamforming delays&#60;/p&#62;
&#60;p&#62;% properties used to derive the beamforming delays&#60;/p&#62;
&#60;p&#62;transducer.sound_speed = 1504.5; % sound speed [m/s]%WHICH VALUE OF THE MATRIX SHOULD I PUT?&#60;br /&#62;
transducer.focus_distance = Nx/4; % focus distance [m]&#60;br /&#62;
transducer.elevation_focus_distance = 19e-3;% focus distance in the elevation plane [m]&#60;br /&#62;
transducer.steering_angle = 0; % steering angle [degrees]&#60;/p&#62;
&#60;p&#62;transducer.transmit_apodization = 'Rectangular';&#60;br /&#62;
transducer.receive_apodization = 'Rectangular';&#60;/p&#62;
&#60;p&#62;% define the transducer elements that are currently active&#60;/p&#62;
&#60;p&#62;transducer.active_elements = zeros(transducer.number_elements, 1);&#60;br /&#62;
transducer.active_elements(1:19) = 1;&#60;/p&#62;
&#60;p&#62;% % append input signal used to drive the transducer&#60;br /&#62;
 transducer.input_signal = input_signal;&#60;/p&#62;
&#60;p&#62;% create the transducer using the defined settings&#60;br /&#62;
transducer = makeTransducer(kgrid, transducer);&#60;/p&#62;
&#60;p&#62;transducer.plot;&#60;br /&#62;
transducer.properties;&#60;/p&#62;
&#60;p&#62; t=medium.sound_speed;&#60;br /&#62;
 u= medium.density;&#60;br /&#62;
 number_scan_lines=79;&#60;/p&#62;
&#60;p&#62;medium_position=[1, Ny/2 - transducer_width/2, Nz/2 - transducer.element_length/2];&#60;/p&#62;
&#60;p&#62;% run the simulation&#60;/p&#62;
&#60;p&#62;for scan_line_index = 1:number_scan_lines&#60;/p&#62;
&#60;p&#62;    % update the command line status&#60;br /&#62;
    disp('');&#60;br /&#62;
    disp(['Computing scan line ' num2str(scan_line_index) ' of ' num2str(number_scan_lines)]);&#60;/p&#62;
&#60;p&#62;% load the current section of the medium&#60;br /&#62;
  medium.sound_speed = t(:, medium_position(2):medium_position(2)+ Ny-1 , :);&#60;br /&#62;
    medium.density=  u(:, medium_position(2):medium_position(2) + Ny-1 , :);&#60;/p&#62;
&#60;p&#62;    % run the simulation&#60;br /&#62;
    sensor_data = kspaceFirstOrder3D(kgrid, medium, transducer, transducer)%,input_args{:});&#60;/p&#62;
&#60;p&#62;    % extract the scan line from the sensor data&#60;br /&#62;
    scan_lines(scan_line_index, :) = transducer.scan_line(sensor_data);&#60;/p&#62;
&#60;p&#62;    % update medium position&#60;br /&#62;
 medium_position = medium_position + [0 transducer.element_width 0];&#60;/p&#62;
&#60;p&#62;end&#60;/p&#62;
&#60;p&#62;c0=1540 ; %WHICH VALUE SHOULD I PUT?&#60;/p&#62;
&#60;p&#62;% create radius variable assuming that t0 corresponds to the middle of the&#60;br /&#62;
% input signal&#60;/p&#62;
&#60;p&#62;t0 = length(input_signal)*kgrid.dt/2;&#60;br /&#62;
r = c0*( (1:length(kgrid.t_array))*kgrid.dt/2 - t0);    % [m]&#60;/p&#62;
&#60;p&#62;% create time gain compensation function based on attenuation value,&#60;br /&#62;
% transmit frequency, and round trip distance&#60;/p&#62;
&#60;p&#62;tgc_alpha = 0.6;		% [dB/(MHz cm)]  %IT's THE ATTENUATION OUTSIDE THE BALL, HOW CAN I TAKE IN ACCOUNT ALSO THE  %ALPHA OF THE INSIDE MEDIUM?&#60;/p&#62;
&#60;p&#62;tgc = exp(2*tgc_alpha*tone_burst_freq/1e6*r*100);&#60;/p&#62;
&#60;p&#62;% apply the time gain compensation to each of the scan lines&#60;br /&#62;
scan_lines = bsxfun(@times, tgc, scan_lines);&#60;/p&#62;
&#60;p&#62;% filter the scan lines using both the transmit frequency and the second harmonic&#60;br /&#62;
scan_lines_fund = gaussianFilter(scan_lines, 1/kgrid.dt, tone_burst_freq, 100, true);&#60;br /&#62;
scan_lines_harm = gaussianFilter(scan_lines, 1/kgrid.dt, 2*tone_burst_freq, 30, true);&#60;br /&#62;
% envelope detection&#60;br /&#62;
scan_lines_fund = envelopeDetection(scan_lines_fund);&#60;br /&#62;
scan_lines_harm = envelopeDetection(scan_lines_harm);&#60;br /&#62;
% normalised log compression&#60;br /&#62;
compression_ratio = 3;&#60;br /&#62;
scan_lines_fund = logCompression(scan_lines_fund, compression_ratio, true);&#60;br /&#62;
scan_lines_harm = logCompression(scan_lines_harm, compression_ratio, true);&#60;br /&#62;
% upsample the image using linear interpolation&#60;br /&#62;
scale_factor = 2;&#60;br /&#62;
scan_lines_fund = interp2(1:kgrid.Nt, (1:number_scan_lines).', scan_lines_fund, 1:kgrid.Nt, (1:1/scale_factor:number_scan_lines).');&#60;br /&#62;
scan_lines_harm = interp2(1:kgrid.Nt, (1:number_scan_lines).', scan_lines_harm, 1:kgrid.Nt, (1:1/scale_factor:number_scan_lines).');
&#60;/p&#62;</description>
		</item>

	</channel>
</rss>
