Spaces:
Runtime error
Runtime error
| import numpy as np | |
| import nibabel as nib | |
| import nrrd | |
| def extract_roi(ct_image, center_x=256, center_y=256, length=300, width=300): | |
| """ | |
| Extract a Region of Interest (ROI) from the CT image. | |
| Parameters: | |
| ct_image (numpy.ndarray): The CT image data as a 3D NumPy array. | |
| center_x (int): X-coordinate of the center of the ROI. | |
| center_y (int): Y-coordinate of the center of the ROI. | |
| length (int): Length of the square ROI. | |
| width (int): Width of the square ROI. | |
| Returns: | |
| numpy.ndarray: The ROI extracted from the CT image. | |
| """ | |
| half_length = length // 2 | |
| half_width = width // 2 | |
| start_x = max(0, center_x - half_length) | |
| end_x = min(ct_image.shape[0], center_x + half_length) | |
| start_y = max(0, center_y - half_width) | |
| end_y = min(ct_image.shape[1], center_y + half_width) | |
| return ct_image[:, start_x:end_x, start_y:end_y] | |
| def calculate_contrast(ct_image): | |
| """ | |
| Calculate the contrast of a CT image. | |
| Parameters: | |
| ct_image (numpy.ndarray): The CT image data as a 3D NumPy array. | |
| Returns: | |
| float: The contrast of the CT image. | |
| """ | |
| # Assuming the CT image data ranges from -1024 to 3071 (typical Hounsfield Units range for CT scans) | |
| min_value = -1024.0 | |
| max_value = 3071.0 | |
| #ct_image_roi=extract_roi(ct_image, center_x=0, center_y=0, length=300, width=300) | |
| #ct_image_roi_mean=np.mean(ct_image_roi) | |
| contrast = np.abs((np.max(ct_image) - np.min(ct_image))) / (max_value - min_value) | |
| return contrast | |
| def calculate_standard_deviation(ct_image): | |
| """ | |
| Calculate the standard deviation of CT values in the image. | |
| Parameters: | |
| ct_image (numpy.ndarray): The CT image data as a 3D NumPy array. | |
| Returns: | |
| float: The standard deviation of CT values. | |
| """ | |
| return np.std(ct_image) | |
| import matplotlib.pyplot as plt | |
| def plot_ct_value_distribution(ct_image): | |
| """ | |
| Plot the distribution of CT values in the image. | |
| Parameters: | |
| ct_image (numpy.ndarray): The CT image data as a 3D NumPy array. | |
| """ | |
| # Flatten the 3D array to a 1D array to get all CT values. | |
| ct_values = ct_image.flatten() | |
| # Create the histogram of CT values. | |
| plt.hist(ct_values, bins=100, range=(-1024, 3071), color='blue', alpha=0.7) | |
| plt.xlabel('CT Value') | |
| plt.ylabel('Frequency') | |
| plt.title('Distribution of CT Values') | |
| plt.grid(True) | |
| plt.show() | |
| def ct_windowing(ct_image, window_width, window_level): | |
| """ | |
| Apply CT windowing to the CT image. | |
| Parameters: | |
| ct_image (numpy.ndarray): The CT image data as a 3D NumPy array. | |
| window_width (float): The window width. | |
| window_level (float): The window level. | |
| Returns: | |
| numpy.ndarray: The CT image data after applying windowing. | |
| """ | |
| # Calculate the lower and upper bounds of the window. | |
| lower_bound = window_level - window_width / 2.0 | |
| upper_bound = window_level + window_width / 2.0 | |
| # Clip the CT values within the window bounds. | |
| ct_image_windowed = np.clip(ct_image, lower_bound, upper_bound) | |
| return ct_image_windowed | |
| def main(): | |
| # Replace 'your_ct_image.nii' with the path to your NIfTI CT image file. | |
| pcct_path = r'D:\Data\dataNeaotomAlpha\Nifti\2511\2511_2.nii.gz' | |
| cbct_path = r'D:\Data\M2OLIE_Phantom\pre_cbct.nrrd' | |
| nifti_file_path = pcct_path | |
| nrrd_file_path = cbct_path | |
| # Load the NIfTI CT image data using nibabel. | |
| ct_image_nifti = nib.load(nifti_file_path) | |
| ct_image_data = ct_image_nifti.get_fdata() | |
| #ct_image_data, header = nrrd.read(nrrd_file_path) | |
| window_width = 150 | |
| window_level = 30 | |
| #plot_ct_value_distribution(ct_image_data) | |
| ct_image_data = ct_windowing(ct_image_data, window_width, window_level) | |
| #plot_ct_value_distribution(ct_image_data) | |
| # cut roi | |
| center_x = ct_image_data.shape[0] // 2 | |
| center_y = ct_image_data.shape[1] // 2 | |
| ct_image_roi=extract_roi(ct_image_data, center_x=center_x, center_y=center_y, length=300, width=300) | |
| ct_image_roi_mean=np.mean(ct_image_roi) | |
| # Calculate contrast and standard deviation of CT values. | |
| contrast = calculate_contrast(ct_image_data) | |
| std_deviation = calculate_standard_deviation(ct_image_data) | |
| print(ct_image_data.shape) | |
| print("size of ROI:", ct_image_roi.shape) | |
| print("Mean of CT values in ROI:", ct_image_roi_mean) | |
| print("Contrast of CT image:", contrast) | |
| print("Standard Deviation of CT values:", std_deviation) | |
| if __name__ == "__main__": | |
| main() | |