<?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: Image Artefacts - Ultrasound Imaging</title>
		<link>http://www.k-wave.org/forum/topic/image-artefacts-ultrasound-imaging</link>
		<description>Support for the k-Wave MATLAB toolbox</description>
		<language>en-US</language>
		<pubDate>Wed, 13 May 2026 02:33:51 +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/image-artefacts-ultrasound-imaging" rel="self" type="application/rss+xml" />

		<item>
			<title>Mithun on "Image Artefacts - Ultrasound Imaging"</title>
			<link>http://www.k-wave.org/forum/topic/image-artefacts-ultrasound-imaging#post-4849</link>
			<pubDate>Fri, 21 Nov 2014 16:40:12 +0000</pubDate>
			<dc:creator>Mithun</dc:creator>
			<guid isPermaLink="false">4849@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi Brad,&#60;/p&#62;
&#60;p&#62;That was of great help. Thank you.&#60;/p&#62;
&#60;p&#62;Kind Regards,&#60;br /&#62;
Mithun
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Bradley Treeby on "Image Artefacts - Ultrasound Imaging"</title>
			<link>http://www.k-wave.org/forum/topic/image-artefacts-ultrasound-imaging#post-4810</link>
			<pubDate>Sat, 01 Nov 2014 11:30:51 +0000</pubDate>
			<dc:creator>Bradley Treeby</dc:creator>
			<guid isPermaLink="false">4810@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi Mithun,&#60;/p&#62;
&#60;p&#62;If you plot the simulation, you'll see the wave from the edge of the aperture. It looks like a spherical wave (or cylindrical wave depending on your aperture shape), but varies in polarity on either side of planar wave front. I've created a very simple example to illustrate:&#60;/p&#62;
&#60;pre&#62;&#60;code&#62;clear all;

% create the computational grid
Nx = 64;            % number of grid points in the x direction
Ny = 32;            % number of grid points in the y direction
Nz = 96;            % number of grid points in the z direction
dx = 0.1e-3;        % grid point spacing in the x direction [m]
dy = 0.1e-3;        % grid point spacing in the y direction [m]
dz = 0.1e-3;        % grid point spacing in the z direction [m]
kgrid = makeGrid(Nx, dx, Ny, dy, Nz, dz);

% define the properties of the propagation medium
medium.sound_speed = 1500;

% create time array
kgrid.t_array = makeTime(kgrid, medium.sound_speed, 0.5, 4e-6);

% create initial pressure distribution
source.p0 = zeros(Nx, Ny, Nz);
source.p0(20, 14:19, 38:59) = 1;  

% define sensor mask
sensor.mask = zeros(Nx, Ny, Nz);
sensor.mask(Nx/2, Ny/2, Nz/4) = 1;
sensor.mask(3*Nx/4, Ny/2, Nz/2) = 1;

% input arguments
input_args = {&#38;#39;PlotPML&#38;#39;, false, &#38;#39;DataCast&#38;#39;, &#38;#39;single&#38;#39;};

% run the simulation
sensor_data = kspaceFirstOrder3D(kgrid, medium, source, sensor, input_args{:});

% plot the simulated sensor data
figure;
plot(sensor_data.&#38;#39;)
ylabel(&#38;#39;Pressure&#38;#39;);
xlabel(&#38;#39;Time Step&#38;#39;);
legend(&#38;#39;Off Axis&#38;#39;, &#38;#39;On Axis&#38;#39;);&#60;/code&#62;&#60;/pre&#62;
&#60;p&#62;Hope that helps,&#60;/p&#62;
&#60;p&#62;Brad.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Mithun on "Image Artefacts - Ultrasound Imaging"</title>
			<link>http://www.k-wave.org/forum/topic/image-artefacts-ultrasound-imaging#post-4789</link>
			<pubDate>Fri, 24 Oct 2014 10:33:07 +0000</pubDate>
			<dc:creator>Mithun</dc:creator>
			<guid isPermaLink="false">4789@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi Brad,&#60;/p&#62;
&#60;p&#62;Thank you for the valuable comments. Yes of-course, I can zero the first part of the signal. But I would like to understand whats happening actually. The high signal is coming not in the very beginning, but at around 100th sample for the middle element. It is a bipolar signal with negative cycle first and positive next. Then I thought it may be a reflection with phase shift of input signal with 1 cycle. How can I recognize an edge wave?&#60;/p&#62;
&#60;p&#62;Combining sensor data is really useful. Thank you.&#60;/p&#62;
&#60;p&#62;Regards,&#60;br /&#62;
Mithun
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Bradley Treeby on "Image Artefacts - Ultrasound Imaging"</title>
			<link>http://www.k-wave.org/forum/topic/image-artefacts-ultrasound-imaging#post-4784</link>
			<pubDate>Tue, 21 Oct 2014 16:04:57 +0000</pubDate>
			<dc:creator>Bradley Treeby</dc:creator>
			<guid isPermaLink="false">4784@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi Mithun,&#60;/p&#62;
&#60;p&#62;This function was added as part of k-Wave V1.1 (released a couple of weeks ago).&#60;/p&#62;
&#60;p&#62;The signal at the beginning will be your input signal. Inside the code, the source and sensor act independently, so if they are in the same position, the sensor will also record the input signal. There's a couple of ways you could remove this:&#60;/p&#62;
&#60;p&#62;(1) You could zero the first part of the signal, e.g., following the &#34;Simulating B-mode Ultrasound Images Example&#34;.&#60;/p&#62;
&#60;p&#62;(2) You could run a separate simulation in a homogeneous medium, and subtract the recorded signal from the signal you record when you have scatterers.&#60;/p&#62;
&#60;p&#62;Are you sure it's a reflection, and not an edge wave from the edge of the transducer?&#60;/p&#62;
&#60;p&#62;Brad.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Mithun on "Image Artefacts - Ultrasound Imaging"</title>
			<link>http://www.k-wave.org/forum/topic/image-artefacts-ultrasound-imaging#post-4783</link>
			<pubDate>Tue, 21 Oct 2014 15:02:38 +0000</pubDate>
			<dc:creator>Mithun</dc:creator>
			<guid isPermaLink="false">4783@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Dear Brad,&#60;/p&#62;
&#60;p&#62;I fixed it by adding the code you provided in another post to KwaveTransducer class. Thats amazing, it saved lot of time. Thank you.&#60;/p&#62;
&#60;p&#62;My problem is that I am getting a huge initial signal in all elements. This is a phase inverted bipolar signal. Is it the input signal itself?  How can I get rid of it? My transducer is below PML I guess. Even after this initial signal, I have another weak reflection also from unexpected depth. Any ideas on it looking at the code above?&#60;/p&#62;
&#60;p&#62;Thank You,&#60;br /&#62;
Kind Regards,&#60;br /&#62;
Mithun
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Mithun on "Image Artefacts - Ultrasound Imaging"</title>
			<link>http://www.k-wave.org/forum/topic/image-artefacts-ultrasound-imaging#post-4781</link>
			<pubDate>Tue, 21 Oct 2014 14:08:29 +0000</pubDate>
			<dc:creator>Mithun</dc:creator>
			<guid isPermaLink="false">4781@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Dear Brad,&#60;br /&#62;
Thanks for the response. Great to know about apodization in c++ code. I am not able to use transducer.combine_sensor_data(sensor_data). Its throwing an error &#34;No appropriate method, property, or field combine_sensor_data for class kWaveTransducer&#34;. Do I have to write the method explicitly? Please help me on this. &#60;/p&#62;
&#60;p&#62;I am not going to use scan_line method as I am interested in data from each elements separately.&#60;/p&#62;
&#60;p&#62;Thank You,&#60;br /&#62;
Regards,&#60;br /&#62;
Mithun
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Bradley Treeby on "Image Artefacts - Ultrasound Imaging"</title>
			<link>http://www.k-wave.org/forum/topic/image-artefacts-ultrasound-imaging#post-4771</link>
			<pubDate>Thu, 16 Oct 2014 11:40:56 +0000</pubDate>
			<dc:creator>Bradley Treeby</dc:creator>
			<guid isPermaLink="false">4771@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Hi Mithun,&#60;/p&#62;
&#60;p&#62;There is currently a difference in the way the C++ and MATLAB codes return the data when using an object of the &#60;code&#62;kWaveTransducer&#60;/code&#62; class as a sensor. The MATLAB code returns one time series per active transducer element, while the C++ code returns one time series per grid point that forms part of the active transducer. &#60;/p&#62;
&#60;p&#62;If using the C++ code, before using the &#60;code&#62;scan_line&#60;/code&#62; method, you should call:&#60;/p&#62;
&#60;p&#62;&#60;code&#62;sensor_data = transducer.combine_sensor_data(sensor_data);&#60;/code&#62;&#60;/p&#62;
&#60;p&#62;This will combine the sensor data to give a single time series per active transducer element, analogous to the output from the MATLAB code.&#60;/p&#62;
&#60;p&#62;Note that transmit apodization is not currently implemented in the C++ code, i.e., the apodization is always the same as:&#60;/p&#62;
&#60;p&#62;&#60;code&#62;transducer.transmit_apodization = &#38;#39;Rectangular&#38;#39;;&#60;/code&#62;&#60;/p&#62;
&#60;p&#62;(see the discussion &#60;a href=&#34;http://www.k-wave.org/forum/topic/question-about-the-transducercombine_sensor_data-method&#34;&#62;here&#60;/a&#62;).&#60;/p&#62;
&#60;p&#62;Let me know if that doesn't solve the problem.&#60;/p&#62;
&#60;p&#62;Brad.
&#60;/p&#62;</description>
		</item>
		<item>
			<title>Mithun on "Image Artefacts - Ultrasound Imaging"</title>
			<link>http://www.k-wave.org/forum/topic/image-artefacts-ultrasound-imaging#post-4767</link>
			<pubDate>Sun, 12 Oct 2014 09:34:55 +0000</pubDate>
			<dc:creator>Mithun</dc:creator>
			<guid isPermaLink="false">4767@http://www.k-wave.org/forum/</guid>
			<description>&#60;p&#62;Dear All,&#60;/p&#62;
&#60;p&#62;I am trying to do a simple US image simulation using K-wave [Transducer as source and sensor]. Quite new to it. I created a medium and then a ball in the middle with different speed of sound and density. I expected only the reflection from the ball. Instead I am seeing a very high signal in the beginning of time trace (May be input signal?, How to get rid?) and different reverberations at almost all depths. What may be the reason for this? I put my transducer below PML. I am pasting my script below. Can anyone please throw your views on it? It would be of great help for me to move forward.&#60;/p&#62;
&#60;p&#62;clear all;&#60;br /&#62;
clc&#60;br /&#62;
% simulation settings&#60;br /&#62;
DATA_CAST = 'single';&#60;/p&#62;
&#60;p&#62;% =========================================================================&#60;br /&#62;
% DEFINE THE K-WAVE GRID&#60;br /&#62;
% =========================================================================&#60;/p&#62;
&#60;p&#62;% set the size of the perfectly matched layer (PML)&#60;br /&#62;
PML_X_SIZE = 20;            % [grid points]&#60;br /&#62;
PML_Y_SIZE = 10;            % [grid points]&#60;br /&#62;
PML_Z_SIZE = 10;            % [grid points]&#60;/p&#62;
&#60;p&#62;% set total number of grid points not including the PML&#60;br /&#62;
Nx = 512 - 2*PML_X_SIZE;    % [grid points]&#60;br /&#62;
Ny = 512 - 2*PML_Y_SIZE;    % [grid points]&#60;br /&#62;
Nz = 128 - 2*PML_Z_SIZE;     % [grid points]&#60;/p&#62;
&#60;p&#62;% set desired grid size in the x-direction not including the PML&#60;br /&#62;
x = 30e-3;                  % [m]&#60;/p&#62;
&#60;p&#62;% calculate the spacing between the grid points&#60;br /&#62;
dx = x/Nx;                  % [m]&#60;br /&#62;
dy = dx;                    % [m]&#60;br /&#62;
dz = dx;                    % [m]&#60;/p&#62;
&#60;p&#62;% create the k-space grid&#60;br /&#62;
kgrid = makeGrid(Nx, dx, Ny, dy, Nz, dz);&#60;/p&#62;
&#60;p&#62;% Total time, 2 times for US&#60;br /&#62;
t_end = (x/1500)*2;                  % [s]&#60;br /&#62;
[kgrid.t_array,dt] = makeTime(kgrid, 1500, [], t_end);&#60;/p&#62;
&#60;p&#62;% =========================================================================&#60;br /&#62;
% DEFINE THE INPUT SIGNAL&#60;br /&#62;
% =========================================================================&#60;/p&#62;
&#60;p&#62;% define properties of the input signal&#60;br /&#62;
source_strength = 5e6;          % [Pa]&#60;br /&#62;
tone_burst_freq = 1.5e6;    	% [Hz]&#60;br /&#62;
tone_burst_cycles = 2;&#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./(1500*1000)).*input_signal;&#60;/p&#62;
&#60;p&#62;medium.sound_speed  =1500;      % [m/s]&#60;br /&#62;
medium.density = 1000;          % [kg/m^3]&#60;br /&#62;
% medium.alpha_coeff = 0.0022;      % [dB/(MHz^y cm)]&#60;br /&#62;
% medium.alpha_power = 2;&#60;br /&#62;
% medium.BonA = 6;&#60;/p&#62;
&#60;p&#62;% define properties&#60;/p&#62;
&#60;p&#62;density_map = 1000*ones(Nx_tot, Ny_tot, Nz_tot);&#60;/p&#62;
&#60;p&#62;medium.density = density_map (:,:,:);&#60;/p&#62;
&#60;p&#62;ball_radius = round(.1e-3/dx);    	% [mm]&#60;/p&#62;
&#60;p&#62;p1 = 962*makeBall(Nx, Ny, Nz,PML_X_SIZE + round(16e-3/dx),PML_Y_SIZE + round(15e-3/dx), PML_Z_SIZE + Nz/2, ball_radius);&#60;br /&#62;
medium.density = medium.density + p1;&#60;/p&#62;
&#60;p&#62;% DEFINE THE ULTRASOUND TRANSDUCER&#60;br /&#62;
% =========================================================================&#60;/p&#62;
&#60;p&#62;% physical properties of the transducer&#60;br /&#62;
transducer.number_elements = 64;    % total number of transducer elements&#60;br /&#62;
transducer.element_width = 2;       % width of each element [grid points/voxels]&#60;br /&#62;
transducer.element_length = 24;     % length of each element [grid points/voxels]&#60;br /&#62;
transducer.element_spacing = 0;     % spacing (kerf  width) between the elements [grid points/voxels]&#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;br /&#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;br /&#62;
transducer.position = round([PML_X_SIZE+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;br /&#62;
transducer.sound_speed = 1500;              % sound speed [m/s]&#60;br /&#62;
transducer.focus_distance = 15e-3;        % focus distance [m]&#60;br /&#62;
transducer.elevation_focus_distance = 16e-3 + PML_X_SIZE; % focus distance in the elevation plane [m]&#60;br /&#62;
transducer.steering_angle = 0;              % steering angle [degrees]&#60;/p&#62;
&#60;p&#62;% apodization&#60;br /&#62;
transducer.transmit_apodization = 'Hanning';&#60;br /&#62;
transducer.receive_apodization = 'Rectangular';&#60;/p&#62;
&#60;p&#62;% define the transducer elements that are currently active&#60;br /&#62;
transducer.active_elements = zeros(transducer.number_elements, 1);&#60;br /&#62;
transducer.active_elements(1:transducer.number_elements) = 1;&#60;/p&#62;
&#60;p&#62;transducer.input_signal = input_signal;&#60;br /&#62;
% create the transducer using the defined settings&#60;br /&#62;
transducer = makeTransducer(kgrid, transducer);&#60;/p&#62;
&#60;p&#62;% print out transducer properties&#60;br /&#62;
transducer.properties;&#60;/p&#62;
&#60;p&#62;% =========================================================================&#60;br /&#62;
% RUN THE SIMULATION&#60;br /&#62;
% =========================================================================&#60;br /&#62;
sensor.mask=transducer.all_elements_mask;&#60;br /&#62;
% set the input settings&#60;br /&#62;
input_args = {...&#60;br /&#62;
    'PMLInside', false, 'PlotSim', false, 'PMLSize', [PML_X_SIZE, PML_Y_SIZE, PML_Z_SIZE], ...&#60;br /&#62;
    'DataCast', DATA_CAST};&#60;/p&#62;
&#60;p&#62;% run the simulation&#60;br /&#62;
sensor_data = kspaceFirstOrder3DC(kgrid, medium, transducer, transducer, input_args{:});&#60;/p&#62;
&#60;p&#62;% extract a single scan line from the sensor data using the current&#60;br /&#62;
% beamforming settings&#60;br /&#62;
scan_line = transducer.scan_line(sensor_data);&#60;br /&#62;
% reshape sensor data to y, z, t&#60;/p&#62;
&#60;p&#62;sensor_data_rs = reshape(sensor_data, transducer.number_elements*transducer.element_width, transducer.element_length, length(kgrid.t_array));&#60;/p&#62;
&#60;p&#62;Thank You&#60;br /&#62;
Kind Regards,&#60;br /&#62;
Mithun
&#60;/p&#62;</description>
		</item>

	</channel>
</rss>
