Sarah111-AHM / Semsmah

2 stars 0 forks source link

Proj ابوضلفة #48

Closed Sarah111-AHM closed 1 year ago

Sarah111-AHM commented 1 year ago

DSAI 1303 - Data Science Programming Languages Course Project: Biomedical Image Analysis in Python Please note the following regarding homework submissions:

No email submissions will be accepted under any circumstances. The hw is to be solved individually. Any similaraty in hws will lead to 0 for all students involved. Once you write all codes in their corresponding cells, go to File -> download as -> notebook (.ipynb). Then submit the downloaded notebook. If you make a mistake, you can resubmit. The Google Classroom will consider the last submission. Once you submit, download your submitted file and check that the cells contain code and they are not empty. If you submit empty cells, you will get 0. Instructions: Solve Questions in the respective cells below. Make sure you fill in any place that says YOUR CODE HERE. Note: You should write comments to help other programmers understand your code. Do not use magic numbers and define the constants value as a constant variable. Name your variables based on Variable Naming Conventions rules. Here, we'll work with magnetic resonance (MR) imaging data from the Sunnybrook Cardiac Dataset. The full image is a 3D time series spanning a single heartbeat. These data are used by radiologists to measure the ejection fraction: the proportion of blood ejected from the left ventricle during each stroke.

To achaive this project you should refer to next source:

https://sakibreza.github.io/biomedical/

Let's import one sample You may refer to next source to download sample with number SCD2001_MR_117:

https://www.kaggle.com/datasets/salikhussaini49/sunnybrook-cardiac-mri

input # YOUR CODE HERE out put

Image type: <class 'imageio.core.util.Array'>
Shape of image array: (256, 256)

input # YOUR CODE HERE out put <matplotlib.image.AxesImage at 0x17362cf5cd0>

https://drive.google.com/file/d/1e8KO9APFB76KATfsKKoEiiePFJLWxV9i/view?usp=drivesdk

Make the plot with grayscale

input # YOUR CODE HERE out put https://drive.google.com/file/d/1-huALqKd4pWXFJIaPXCjDZC-Yazxrtu0/view?usp=drivesdk

Make plot the colorbar

input # YOUR CODE HERE out put Data type: float64 Min value: 0.0 Max value: 255.0

https://drive.google.com/file/d/1LBN_vHj0sSsKvdi9JF_FyWAtkYz8YI2q/view?usp=drivesdk

Rotation

Rotate the figure and show both of them input # YOUR CODE HERE out put `<matplotlib.image.AxesImage at 0x17362e24d60>'

https://drive.google.com/file/d/1AOB1EodjW7fcApfbEpMQG5jOP3n53HRd/view?usp=drivesdk

Histogram

Plot the histogram as shown below input # YOUR CODE HERE out put [<matplotlib.lines.Line2D at 0x17362df95e0>]

https://drive.google.com/file/d/1DTZhACYkpFFDSlilJc6Em7j6evY1oHD0/view?usp=drivesdk

Mask

Create next mask input # YOUR CODE HERE out put <matplotlib.image.AxesImage at 0x1736831e550>

https://drive.google.com/file/d/1IP97sA4v0VWkuV7qF7Da6R1hThfzgom1/view?usp=drivesdk

Show selected part

Show the part selected by using previous mask input # YOUR CODE HERE out put <matplotlib.image.AxesImage at 0x1736837e490>

https://drive.google.com/file/d/1A3r0owVSuKZOk74M-jYX825BZ7dQmsRz/view?usp=drivesdk

https://drive.google.com/file/d/1A3r0owVSuKZOk74M-jYX825BZ7dQmsRz/view?usp=drivesdk

Tune a mask

Tune the previous maske as follows input # YOUR CODE HERE out put <matplotlib.image.AxesImage at 0x17368730fa0>

https://drive.google.com/file/d/1BCMs8ZMrtSeFVdq9VmZglJBAPmtJNsH2/view?usp=drivesdk

Show result of running mask

input # YOUR CODE HERE out put <matplotlib.image.AxesImage at 0x17368801160>

https://drive.google.com/file/d/1DMghel25DDWTn9UQVsFEyp-y8WRNE7Gy/view?usp=drivesdk

https://drive.google.com/file/d/1DMghel25DDWTn9UQVsFEyp-y8WRNE7Gy/view?usp=drivesdk

https://drive.google.com/file/d/1DMghel25DDWTn9UQVsFEyp-y8WRNE7Gy/view?usp=drivesdk

Edge detection

input # YOUR CODE HERE out put <matplotlib.colorbar.Colorbar at 0x1736892e130>

https://drive.google.com/file/d/1AzwCUGm3FUeeYHjNk1E5cPvPFFZCTBR_/view?usp=drivesdk

Segmentation

Identify labels input # YOUR CODE HERE out put

Num. Labels: 26
<matplotlib.image.AxesImage at 0x17369d33c40>

https://drive.google.com/file/d/1F6ozRRVh_wRQxK5LPcvDCFkVYnnw-FyI/view?usp=drivesdk

Select objects input # YOUR CODE HERE out put

https://drive.google.com/file/d/1NL6Z-h84MrURF3XI41_1UTY4tqNPxM4w/view?usp=drivesdk

Extract specific object input # YOUR CODE HERE out put

Number of objects: 1
Indices for first box: (slice(107, 149, None), slice(116, 162, None))
<matplotlib.image.AxesImage at 0x17369dfa610>

https://drive.google.com/file/d/1VE1hkweazioWizn-kZC3DXCDX2Jpv4lF/view?usp=drivesdk

حسنًا، سأقوم بمساعدتك في حل هذا المشروع، وسأرد عليك سؤالًا تلو الآخر وأضع الإجابات في الخلايا المناسبة. لكن يرجى تحميل الصورة من الرابط الذي ذكرته في السؤال الأول وتسميتها باسم "SCD2001_MR_117.jpg" قبل بدء الحل.

سؤال 1: استيراد الصورة وعرض نوع وحجم مصفوفة الصورة.

الإجابة:

import imageio
import matplotlib.pyplot as plt
import numpy as np

# استيراد الصورة وعرض نوع وحجم مصفوفة الصورة
img = imageio.imread('SCD2001_MR_117.jpg')
print("Image type:", type(img))
print("Shape of image array:", img.shape)

سؤال 2: رسم الصورة باستخدام الرمادي.

الإجابة:

# رسم الصورة باستخدام الرمادي
plt.imshow(img, cmap='gray')
plt.show()

سؤال 3: إضافة colorbar للصورة.

الإجابة:

# إضافة colorbar للصورة
plt.imshow(img, cmap='gray')
plt.colorbar()
plt.show()

# طباعة نوع البيانات والقيم الدنيا والعليا في مصفوفة الصورة
print("Data type:", img.dtype, "Min value:", np.min(img), "Max value:", np.max(img))

سؤال 4: دوران الصورة وعرض الصورتين معًا.

الإجابة:

# دوران الصورة وعرض الصورتين معًا
rotated_img = np.rot90(img)
plt.subplot(1, 2, 1)
plt.imshow(img, cmap='gray')
plt.title('Original Image')
plt.subplot(1, 2, 2)
plt.imshow(rotated_img, cmap='gray')
plt.title('Rotated Image')
plt.show()

سؤال 5: رسم الهيستوغرام الخاص بالصورة.

الإجابة:

# رسم الهيستوغرام الخاص بالصورة
plt.hist(img.ravel(), bins=256, range=(0, 255))
plt.show()

سؤال 6: إنشاء قناع للصورة.

الإجابة:

# إنشاء قناع للصورة
mask = np.zeros_like(img)
mask[50:200, 50:200] = 1

plt.imshow(mask, cmap='gray')
plt.show()

سؤال 7: عرض الجزء المحدد من الصورة باستخدام القناع الذي تم إنشاؤه في السؤال السابق.

الإجابة:

# عرض الجزء المحدد من الصورة باستخدام القناع الذي تم إنشاؤه في السؤال السابق
masked_img = np.copy(img)
masked_img[mask == 0] = 0

plt.imshow(masked_img, cmap='gray')
plt.show()

سؤال 8: ضبط القناع السابق.

الإجابة:

# ضبط القناع السابق
mask = np.zeros_like(img)
mask[75:175, 75:175] = 1
mask[150:200, 25:75] = 1
mask[25:75, 150:200] = 1

plt.imshow(mask, cmap='gray')
plt.show()

سؤال 9: عرض الصورة بعد تشغيل القناع.

الإجابة:

# عرض الصورة بعد تشغيل القناع
masked_img = np.copy(img)
masked_img[mask == 0] = 0

plt.imshow(masked_img, cmap='gray')
plt.show()

سؤال 10: الكشف عن الحواف في الصورة.

الإجابة:

# الكشف عن الحواف في الصورة
from skimage import feature

edges = feature.canny(img, sigma=3)

plt.imshow(edges, cmap='gray')
plt.colorbar()
plt.show()

سؤال 11: تقسيم الصورة إلى مكعذرًا، يبدو أن النص الذي قمت بنسخه ولصقه في السؤال الأول ليس مكتملًا، ولا يحتوي على جميع المعلومات اللازمة لحل هذا المشروع. يرجى إرسال النص الكامل والمستكمل لتتمكن من مساعدتك بشكل أفضل. See

Let's start by importing the necessary libraries and loading the image

import imageio
import numpy as np
import matplotlib.pyplot as plt
image_path = "/kaggle/input/sunnybrook-cardiac-mri/SCD2001_MR_117.npy"
image = imageio.imread(image_path)

Let's check the type and shape of the image

print("Image type:", type(image))
print("Shape of image array:", image.shape)

Now, let's show the image in grayscale

plt.imshow(image, cmap='gray')
plt.title("Grayscale Image")
plt.show()

Let's add a colorbar to see the range of values

plt.imshow(image, cmap='gray')
plt.colorbar()
plt.title("Grayscale Image with Colorbar")
plt.show()

Now, let's rotate the image

rotated_image = np.rot90(image)

Let's show both the original and rotated images side by side

fig, axs = plt.subplots(nrows=1, ncols=2, figsize=(10, 5))
axs[0].imshow(image, cmap='gray')
axs[0].set_title("Original Image")
axs[1].imshow(rotated_image, cmap='gray')
axs[1].set_title("Rotated Image")
plt.show()

Let's plot the histogram of the image

plt.hist(image.ravel(), bins=256, range=(0.0, 255.0))
plt.title("Histogram ofGrayscale Image")
plt.show()

Let's create a mask to select a specific part of the image

mask = np.zeros_like(image)
mask[80:200, 50:200] = 1

Let's show the mask

plt.imshow(mask, cmap='gray')
plt.title("Mask")
plt.show()

Let's use the mask to select the part of the image we want

masked_image = np.ma.masked_array(image, mask=mask)
plt.imshow(masked_image, cmap='gray')
plt.title("Selected Part of Image")
plt.show()

Let's tune the mask to better select the desired part of the image

tuned_mask = np.zeros_like(image)
tuned_mask[120:200, 70:200] = 1

Let's show the tuned mask

plt.imshow(tuned_mask, cmap='gray')
plt.title("Tuned Mask")
plt.show()

Let's apply the tuned mask to the image

masked_image = np.ma.masked_array(image, mask=tuned_mask)
plt.imshow(masked_image, cmap='gray')
plt.title("Selected Part of Image with Tuned Mask")
plt.show()

Let's perform edge detection on the image

from skimage.filters import sobel
edges = sobel(image)
plt.imshow(edges, cmap='gray')
plt.colorbar()
plt.title("Edge Detection")
plt.show()

Let's perform image segmentation to identify different objects in the image

from skimage import measure# First, we need to binarize the image to turn it into a black and white image
binary_image = image > 100

Let's identify the labels for each object in the image

labels = measure.label(binary_image)
num_labels = np.max(labels) + 1
print("Num. Labels:", num_labels)

Let's show the labeled image

plt.imshow(labels, cmap='nipy_spectral')
plt.title("Labeled Image")
plt.show()

Let's select a specific object from the labeled image

selected_object = labels == 2

Let's show the selected object

plt.imshow(selected_object, cmap='gray')
plt.title("Selected Object")
plt.show()

Let's extract the indices for the selected object

object_indices = np.where(selected_object)

print("Number of objects:", len(object_indices))
print("Indices for selected object:", object_indices)

Let's create a bounding box around the selected object

min_y, max_y = np.min(object_indices[0]), np.max(object_indices[0])
min_x, max_x = np.min(object_indices[1]), np.max(object_indices[1])

Let's extract the selected object

extracted_object = image[min_y:max_y+1, min_x:max_x+1]

Let's show the extracted object

plt.imshow(extracted_object, cmap='gray')
plt.title("Extracted Object")
plt.show()

لا، لن يعمل اللصق المباشر على Google Colab. يجب عليك تحميل الملف المناسب وتحميله على Google Colab قبل تشغيله. يمكنك استخدام الأمر التالي لتحميل الملف على Google Colab:

from google.colab import files uploaded = files.upload()

بعد ذلك، يمكنك تحميل الملف واستخدامه كما في المثال المعطى.

الملف الذي يجب تحميله هو ملف الصورة المتواجد في مسار "SCD2001_MR_117.npy" الذي تم استخدامه في المثال المعطى. يمكنك تنزيل هذا الملف من الرابط الذي تم تزويده في سؤال البداية، ومن ثم تحميله على Google Colab باستخدام الأمر الذي ذكرته في الإجابة السابقة.

Sarah111-AHM commented 1 year ago

الرابط الذي يمكنك استخدامه لتنزيل ملف الصورة "SCD2001_MR_117.npy" هو:

https://www.kaggle.com/salikhussaini49/sunnybrook-cardiac-mri/download/SCD2001_MR_117.npy

من الممكن أن يتطلب تحميل الملف إنشاء حساب على موقع Kaggle. وبعد تنزيل الملف، يمكنك تحميله على Google Colab كما ذكرنا سابقاً.