Last updated: 05/16/2017 3:00PM
Integrating Ultrasound Elastography to da Vinci Research Kit (dVRK).
Ultrasound elastography is a good way to detect stiff features at various depths intra-operatively and is not limited to only superficial ones like Palpation. However, free-hand ultrasound elastography is a challenge even for experienced doctors due to various reasons like out of plane motion. Robot assistance has played an important role in surgery due to its high accuracy, safety and efficiency. With proper calibration and force feedback, the robot arm can achieve the most suitable motion for generating elastography images. Therefore, in order to obtain consecutive high-quality elastography images in real time, it is necessary to reach out for the help of a robot.
da Vinci Research Kit(dVRK) is an open-source platform for researchers to develop algorithms for computer assisted surgery. Previously there was no ultrasound elastography integrated. In this project, we want to develop and integrate this module to the DVRK system to allow for future research based on that.
1. Socket programming for ultrasound data acquisition
The above state machine is used for receiving ultrasound image messages from ultrasound machine through network. There are three states in it, which are message header searching, message header receiving and message body receiving. Message header searching is used to efficiently find the potential valid message in the received bit stream. As you can see from the above message structure, the header consists of V, TYPE, DEVICE_NAME and so on. For a valid header, the value for V should be only 1 or 2, TYPE in this application should be IMAGE. Just by verifying these two sections of the header, we can almost be certain that whether we find a valid message or not, which is what we are trying to do in state “Message header searching”.
For state “Message header receiving”, what we do is to receive a complete message header and extract information of message body to be received such as body size and so on. In that way, we can dynamic allocate right size of memory to receive the message body.
For state “Message body receiving”, what we do is to receive a complete message body, which is one or more images in this application, to complete the whole procedure of receiving one message.
Asynchronous non-blocking I/O is a more efficient way of reading data. In the socket case, we usually want to do some other task processing instead of blocking a whole thread to wait for data to be read available. In this project, we use that efficient I/O model to implement the socket programming. The library we use to achieve this goal is libevent.
2. Ultrasound Elastography
The algorithm we use to generate ultrasound elastography is cross-correlation method. It can be implemented in GPU computing way to make it suitable for real-time application.
The following two pictures are a toy example to help understand how the tissue will be compressed with stress.
The following picture is used to demonstrate how to find the time shift for a segment pair including pre and post-compressed radio frequency(RF) signal.
After obtaining the corresponding displacement for each individual segment, we can then calculate the strain value as follow,
where dz is the overall axial deformation of the tissue, c is the speed of the sound inside tissue. ti is the time shift for ith segment. To learn more about the details of this method, please refer to http://www.sciencedirect.com/science/article/pii/016173469190079W.