Getting image set pixel data
An image frame is the pixel data that exists
within an image set to make up a 2D medical image. Use the GetImageFrame
action
to retrieve an HTJ2K-encoded image frame for a given image set in HealthImaging.
The following menus provide code examples for the AWS CLI and AWS SDKs. For more information, see
GetImageFrame
in the AWS HealthImaging API Reference.
Keep the following points in mind when using the GetImageFrame
action:
-
During import, HealthImaging retains encoding for some transfer syntaxes,
but transcodes others to HTJ2K lossless by default. Therefore, image frames must be decoded prior to viewing
in an image viewer. For more information, see Supported transfer syntaxes
and HTJ2K decoding libraries.
-
The GetImageFrame
action returns the image frame in the stored transfer syntax of the instance by default.
For more information, see Supported transfer syntaxes.
-
You can also use GetDICOMInstanceFrames
, HealthImaging's representation of a DICOMweb service, to retrieve DICOM
instance frames (multipart
request) for DICOMweb-compatible viewers and applications. For more information,
see Getting DICOM instance frames from HealthImaging.
To get image set pixel data
Choose a menu based on your access preference to AWS HealthImaging.
Image frames must be accessed and decoded programmatically, as an image viewer is not available in the AWS Management Console.
For more information about decoding and viewing image frames, see HTJ2K decoding libraries.
- C++
-
- SDK for C++
-
//! Routine which downloads an AWS HealthImaging image frame.
/*!
\param dataStoreID: The HealthImaging data store ID.
\param imageSetID: The image set ID.
\param frameID: The image frame ID.
\param jphFile: File to store the downloaded frame.
\param clientConfig: Aws client configuration.
\return bool: Function succeeded.
*/
bool AwsDoc::Medical_Imaging::getImageFrame(const Aws::String &dataStoreID,
const Aws::String &imageSetID,
const Aws::String &frameID,
const Aws::String &jphFile,
const Aws::Client::ClientConfiguration &clientConfig) {
Aws::MedicalImaging::MedicalImagingClient client(clientConfig);
Aws::MedicalImaging::Model::GetImageFrameRequest request;
request.SetDatastoreId(dataStoreID);
request.SetImageSetId(imageSetID);
Aws::MedicalImaging::Model::ImageFrameInformation imageFrameInformation;
imageFrameInformation.SetImageFrameId(frameID);
request.SetImageFrameInformation(imageFrameInformation);
Aws::MedicalImaging::Model::GetImageFrameOutcome outcome = client.GetImageFrame(
request);
if (outcome.IsSuccess()) {
std::cout << "Successfully retrieved image frame." << std::endl;
auto &buffer = outcome.GetResult().GetImageFrameBlob();
std::ofstream outfile(jphFile, std::ios::binary);
outfile << buffer.rdbuf();
}
else {
std::cout << "Error retrieving image frame." << outcome.GetError().GetMessage()
<< std::endl;
}
return outcome.IsSuccess();
}
- CLI
-
- AWS CLI
-
To get image set pixel data
The following get-image-frame
code example gets an image frame.
aws medical-imaging get-image-frame \
--datastore-id "12345678901234567890123456789012"
\
--image-set-id "98765412345612345678907890789012"
\
--image-frame-information imageFrameId=3abf5d5d7ae72f80a0ec81b2c0de3ef4
\
imageframe.jph
Note:
This code example does not include output because the GetImageFrame action returns a stream of pixel data to the imageframe.jph file. For information about decoding and viewing image frames, see HTJ2K decoding libraries.
- Java
-
- SDK for Java 2.x
-
public static void getMedicalImageSetFrame(MedicalImagingClient medicalImagingClient,
String destinationPath,
String datastoreId,
String imagesetId,
String imageFrameId) {
try {
GetImageFrameRequest getImageSetMetadataRequest = GetImageFrameRequest.builder()
.datastoreId(datastoreId)
.imageSetId(imagesetId)
.imageFrameInformation(ImageFrameInformation.builder()
.imageFrameId(imageFrameId)
.build())
.build();
medicalImagingClient.getImageFrame(getImageSetMetadataRequest,
FileSystems.getDefault().getPath(destinationPath));
System.out.println("Image frame downloaded to " + destinationPath);
} catch (MedicalImagingException e) {
System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
}
- JavaScript
-
- SDK for JavaScript (v3)
-
import { GetImageFrameCommand } from "@aws-sdk/client-medical-imaging";
import { medicalImagingClient } from "../libs/medicalImagingClient.js";
/**
* @param {string} imageFrameFileName - The name of the file for the HTJ2K-encoded image frame.
* @param {string} datastoreID - The data store's ID.
* @param {string} imageSetID - The image set's ID.
* @param {string} imageFrameID - The image frame's ID.
*/
export const getImageFrame = async (
imageFrameFileName = "image.jph",
datastoreID = "DATASTORE_ID",
imageSetID = "IMAGE_SET_ID",
imageFrameID = "IMAGE_FRAME_ID",
) => {
const response = await medicalImagingClient.send(
new GetImageFrameCommand({
datastoreId: datastoreID,
imageSetId: imageSetID,
imageFrameInformation: { imageFrameId: imageFrameID },
}),
);
const buffer = await response.imageFrameBlob.transformToByteArray();
writeFileSync(imageFrameFileName, buffer);
console.log(response);
// {
// '$metadata': {
// httpStatusCode: 200,
// requestId: 'e4ab42a5-25a3-4377-873f-374ecf4380e1',
// extendedRequestId: undefined,
// cfId: undefined,
// attempts: 1,
// totalRetryDelay: 0
// },
// contentType: 'application/octet-stream',
// imageFrameBlob: <ref *1> IncomingMessage {}
// }
return response;
};
- Python
-
- SDK for Python (Boto3)
-
class MedicalImagingWrapper:
def __init__(self, health_imaging_client):
self.health_imaging_client = health_imaging_client
def get_pixel_data(
self, file_path_to_write, datastore_id, image_set_id, image_frame_id
):
"""
Get an image frame's pixel data.
:param file_path_to_write: The path to write the image frame's HTJ2K encoded pixel data.
:param datastore_id: The ID of the data store.
:param image_set_id: The ID of the image set.
:param image_frame_id: The ID of the image frame.
"""
try:
image_frame = self.health_imaging_client.get_image_frame(
datastoreId=datastore_id,
imageSetId=image_set_id,
imageFrameInformation={"imageFrameId": image_frame_id},
)
with open(file_path_to_write, "wb") as f:
for chunk in image_frame["imageFrameBlob"].iter_chunks():
if chunk:
f.write(chunk)
except ClientError as err:
logger.error(
"Couldn't get image frame. Here's why: %s: %s",
err.response["Error"]["Code"],
err.response["Error"]["Message"],
)
raise
The following code instantiates the MedicalImagingWrapper object.
client = boto3.client("medical-imaging")
medical_imaging_wrapper = MedicalImagingWrapper(client)
Can't find what you need? Request a code example using the Provide feedback
link at the bottom of this page.