ตรวจจับขอบ (2)
การตรวจจับขอบสามารถทำได้ตามหลายแกน แล้วนำผลลัพธ์มารวมกันเป็นค่าขอบเดียว สำหรับภาพ 2D "แผนที่ขอบ" แนวนอนและแนวตั้งสามารถรวมกันได้โดยใช้ทฤษฎีบทพีทาโกรัส:
$$z = \sqrt{x^2 + y^2}$$
ตัวกรองขอบที่นิยมใช้กันมากคือ Sobel filter ซึ่งให้น้ำหนักพิเศษแก่พิกเซลตรงกลางของตัวตรวจจับ:
weights = [[ 1, 2, 1],
[ 0, 0, 0],
[-1, -2, -1]]
ในแบบฝึกหัดนี้ ให้พัฒนาการตรวจจับขอบจากครั้งก่อนให้ดีขึ้น โดยนำผลลัพธ์จากภาพที่ผ่านฟิลเตอร์ Sobel สองแกนมารวมกันเป็นแผนที่ขอบแบบผสม
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การวิเคราะห์ภาพทางชีวการแพทย์ด้วย Python
คำแนะนำการฝึกหัด
- ใช้
ndi.sobel()กับimตามแกนที่หนึ่งและแกนที่สอง - คำนวณขนาดของขอบโดยรวมโดยใช้ทฤษฎีบทพีทาโกรัส โดยใช้
np.sqrt()และnp.square() - แสดงภาพขนาดขอบ โดยใช้ colormap แบบ grayscale และตั้งค่า
vmaxเป็น75
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Apply Sobel filter along both axes
sobel_ax0 = ndi.sobel(____, axis=____)
sobel_ax1 = ____
# Calculate edge magnitude
edges = ____
# Plot edge magnitude
plt.imshow(____, ____, ____)
format_and_render_plot()