Phát hiện biên (2)
Phát hiện biên có thể được thực hiện theo nhiều trục rồi gộp lại thành một giá trị biên duy nhất. Với ảnh 2D, các "bản đồ biên" theo phương ngang và dọc có thể được kết hợp bằng định lý Pythagoras:
$$z = \sqrt{x^2 + y^2}$$
Một bộ phát hiện biên phổ biến là bộ lọc Sobel. Bộ lọc Sobel gán trọng số cao hơn cho các điểm ảnh ở giữa của bộ phát hiện:
weights = [[ 1, 2, 1],
[ 0, 0, 0],
[-1, -2, -1]]
Trong bài này, hãy cải thiện kết quả phát hiện trước đó bằng cách gộp kết quả của hai ảnh đã lọc Sobel thành một bản đồ biên tổng hợp.
Bài tập này là một phần của khóa học
Phân tích ảnh Y sinh học bằng Python
Hướng dẫn bài tập
- Áp dụng
ndi.sobel()lênimtheo trục thứ nhất và thứ hai. - Tính độ lớn biên tổng thể bằng định lý Pythagoras. Dùng
np.sqrt()vànp.square(). - Hiển thị ảnh độ lớn. Dùng thang màu xám và đặt
vmaxlà75.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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()