Update app.py
Browse files
app.py
CHANGED
|
@@ -81,7 +81,7 @@ def format_kspace_display(k_data):
|
|
| 81 |
c = 255.0 / np.log(1 + max_val)
|
| 82 |
log_img = c * np.log(1 + k_mag)
|
| 83 |
|
| 84 |
-
# ใช้ Gamma correction เสริมความสว่างให้เห็นวงกลมฟิลเตอร์ชัดเจน
|
| 85 |
log_norm = (log_img - np.min(log_img)) / (np.max(log_img) - np.min(log_img) + 1e-8)
|
| 86 |
log_boosted = np.power(log_norm, 0.3)
|
| 87 |
return log_boosted
|
|
@@ -95,23 +95,24 @@ def get_image_from_plot(fig):
|
|
| 95 |
buf.seek(0)
|
| 96 |
return Image.open(buf)
|
| 97 |
|
| 98 |
-
# สร้างภาพองค์ประกอบ K-Space แบบ
|
| 99 |
def draw_kspace_diagram():
|
| 100 |
fig, ax = plt.subplots(figsize=(6, 6))
|
| 101 |
|
| 102 |
-
# สร้าง
|
| 103 |
x = np.linspace(-112, 112, 224)
|
| 104 |
y = np.linspace(112, -112, 224)
|
| 105 |
X, Y = np.meshgrid(x, y)
|
| 106 |
|
|
|
|
| 107 |
freq_x = 8 / 224.0
|
| 108 |
freq_y = 8 / 224.0
|
| 109 |
-
wave = np.cos(2 * np.pi *
|
| 110 |
|
| 111 |
# แสดงรูปคลื่นในกรอบสี่เหลี่ยม
|
| 112 |
ax.imshow(wave, cmap='gray', extent=[-1, 1, -1, 1], origin='upper')
|
| 113 |
|
| 114 |
-
# ตีกรอบสี่เหลี่ยม
|
| 115 |
rect = plt.Rectangle((-1, -1), 2, 2, fill=False, edgecolor='black', lw=2.5)
|
| 116 |
ax.add_patch(rect)
|
| 117 |
|
|
@@ -273,7 +274,7 @@ with col_main:
|
|
| 273 |
|
| 274 |
st.markdown("## 🧩 องค์ประกอบของ K-Space")
|
| 275 |
st.markdown("""
|
| 276 |
-
ข้อมูล
|
| 277 |
""")
|
| 278 |
|
| 279 |
_, col_img_center, _ = st.columns([2.5, 3, 2.5])
|
|
@@ -414,7 +415,6 @@ with col_main:
|
|
| 414 |
|
| 415 |
_, col_fslide, _ = st.columns([1.5, 5, 1.5])
|
| 416 |
with col_fslide:
|
| 417 |
-
# ปรับขยายขอบเขตรัศมีสูงสุดเป็น 160 เพื่อให้คลุมครบทั้ง 4 มุมจอเมื่อเปิดสุดตามหลักคณิตศาสตร์
|
| 418 |
if mode == "Low frequency":
|
| 419 |
radius = st.slider("ปรับระดับความถี่ที่ยอมให้ผ่าน (รัศมีจากตรงกลาง)", 1, 160, 160)
|
| 420 |
else:
|
|
|
|
| 81 |
c = 255.0 / np.log(1 + max_val)
|
| 82 |
log_img = c * np.log(1 + k_mag)
|
| 83 |
|
| 84 |
+
# ใช้ Gamma correction เสริมความสว่างให้เห็นวงกลมฟิลเตอร์ชัดเจนทั่วทั้งพื้นที่
|
| 85 |
log_norm = (log_img - np.min(log_img)) / (np.max(log_img) - np.min(log_img) + 1e-8)
|
| 86 |
log_boosted = np.power(log_norm, 0.3)
|
| 87 |
return log_boosted
|
|
|
|
| 95 |
buf.seek(0)
|
| 96 |
return Image.open(buf)
|
| 97 |
|
| 98 |
+
# สร้างภาพองค์ประกอบ K-Space แบบคลื่นกริดตัดกันสมบูรณ์แบบตามทฤษฎีสัญญาณภาพ
|
| 99 |
def draw_kspace_diagram():
|
| 100 |
fig, ax = plt.subplots(figsize=(6, 6))
|
| 101 |
|
| 102 |
+
# สร้างเมทริกซ์พิกัด
|
| 103 |
x = np.linspace(-112, 112, 224)
|
| 104 |
y = np.linspace(112, -112, 224)
|
| 105 |
X, Y = np.meshgrid(x, y)
|
| 106 |
|
| 107 |
+
# ผสมผสานคลื่นแนวตั้งและแนวนอนเพื่อให้เกิดลวดลายกริดคลื่น 2D ที่ถูกต้อง
|
| 108 |
freq_x = 8 / 224.0
|
| 109 |
freq_y = 8 / 224.0
|
| 110 |
+
wave = np.cos(2 * np.pi * freq_x * X) * np.cos(2 * np.pi * freq_y * Y)
|
| 111 |
|
| 112 |
# แสดงรูปคลื่นในกรอบสี่เหลี่ยม
|
| 113 |
ax.imshow(wave, cmap='gray', extent=[-1, 1, -1, 1], origin='upper')
|
| 114 |
|
| 115 |
+
# ตีกรอบสี่เหลี่ยมล้อมรอบพื้นที่สัญญาณ
|
| 116 |
rect = plt.Rectangle((-1, -1), 2, 2, fill=False, edgecolor='black', lw=2.5)
|
| 117 |
ax.add_patch(rect)
|
| 118 |
|
|
|
|
| 274 |
|
| 275 |
st.markdown("## 🧩 องค์ประกอบของ K-Space")
|
| 276 |
st.markdown("""
|
| 277 |
+
ข้อมูล in k-space มักจะถูกนำมาแสดงผลในรูปแบบตารางสี่เหลี่ยม (Grid) โดยมีแกนหลักคือ **kx (แนวนอน - Frequency)** และ **ky (แนวตั้ง - Phase)** จุดสำคัญคือ **แกน kx และ ky เหล่านี้ ไม่ได้บอกตำแหน่งพิกัดในภาพอวัยวะ** แต่มันคือแกนที่บอกถึงลักษณะของ **"ความถี่เชิงพื้นที่"** ที่เป็นคลื่น (Simusoidal wave) ด้วยเหตุนี้ **จุดแต่ละจุดบน K-space จึงไม่ได้จับคู่แบบ 1 ต่อ 1 กับพิกเซลบนภาพ MRI** (เช่น จุดมุมซ้ายบนของ K-space ไม่ได้สร้างภาพมุมซ้ายบนของอวัยวะ)
|
| 278 |
""")
|
| 279 |
|
| 280 |
_, col_img_center, _ = st.columns([2.5, 3, 2.5])
|
|
|
|
| 415 |
|
| 416 |
_, col_fslide, _ = st.columns([1.5, 5, 1.5])
|
| 417 |
with col_fslide:
|
|
|
|
| 418 |
if mode == "Low frequency":
|
| 419 |
radius = st.slider("ปรับระดับความถี่ที่ยอมให้ผ่าน (รัศมีจากตรงกลาง)", 1, 160, 160)
|
| 420 |
else:
|