cuốn sách gpt4 ai đã làm

Thuật toán sobel 3d trong python?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 15:23:25 hai mươi bốn 4
mua khóa gpt4 Nike

Tôi đang cố gắng tính toán bộ lọc sobel 3d trong python. Tôi có một mã thực sự hay cho hình ảnh 2D như bên dưới.

Nhân tiện. Hình ảnh gốc của tôi là loại uint8.

    preSobel = preSobel.astype('int32')
dx = ndimage.sobel(preSobel, 0) # đạo hàm ngang
dy = ndimage.sobel(preSobel, 1) #đạo hàm dọc
mag = numpy.hypot(dx, dy) #độ lớn
mag *= 255.0 / numpy.max(mag) # chuẩn hóa (Hỏi đáp)
img[i,:,:]=mag

Nhưng theo ý kiến ​​của tôi trang wiki Hiểu biết là để tính 2d, tôi nên nhân kết quả sobel 1d thay vì hypot :confused

Dù sao thì, để lên 3d, tôi nghĩ mình cần tính sobel 1d trên mỗi trục rồi nhân tất cả lên, nhưng tôi không chắc lắm... Có thư viện nào có thể tính sobel 3d nhanh hơn không?

câu trả lời hay nhất

Đầu tiên, trích dẫn của bạnliên kết wikipedia : Phép nhân ở đó đề cập đến cách xây dựng hạt tích chập sobel chứ không phải kết quả cuối cùng.

Đối với bộ lọc sobel 2D, bạn cần một hạt nhân để lấy đạo hàm theo hướng x và một hạt nhân khác để lấy đạo hàm theo hướng Y, ví dụ: nhập mô tả hình ảnh ở đây

Về cơ bản, đây là công việc mà hai lệnh của bạn thực hiện, vì vậy nếu bạn đang sử dụng numpy thì bạn không cần phải tự xây dựng các hạt nhân này.

dx = ndimage.sobel(preSobel, 0) # đạo hàm ngang
dy = ndimage.sobel(preSobel, 1) #đạo hàm dọc

Bây giờ đối với trường hợp 3D, bạn cần 3 thao tác và 3 lõi, một cho dx, dy, dz. Phần wiki được liên kết sẽ cho bạn biết cách xây dựng hạt nhân bằng cách nhân các thành phần. Ví dụ: hạt nhân sobel đã hoàn thành của dZ là ma trận 3x3x3 như sau:

nhập mô tả hình ảnh ở đây

Để có được độ lớn, sau đó bạn vẫn phải lấy căn bậc hai của đạo hàm bình phương (cạnh huyền).

Tôi không có numpy nhưng theo như tôi biết the documentation Lệnh ndimage sobel có thể xử lý bất kỳ số lượng kích thước nào, do đó kernel đã cung cấp:

dx = ndimage.sobel(your3Dmatrix, 0) # x đạo hàm
dy = ndimage.sobel(your3Dmatrix, 1) # y đạo hàm
dz = ndimage.sobel(your3Dmatrix, 2) # z đạo hàm

Bây giờ lệnh cạnh huyền chỉ có thể lấy 2 tham số, vì vậy bạn phải tìm một cách khác để tính mag = sqrt(dx) một cách hiệu quảdx+dydy + dz*dz). Nhưng NumPy sẽ có mọi thứ bạn cần.


gia hạn

Thực tế, nếu bạn chỉ quan tâm đến độ lớn,có một chức năng hoàn chỉnh trong NumPy cho việc này :

 mag = generic_gradient_magnitude(your3Dmatrix, sobel)

Giới thiệu về python - thuật toán sobel 3d trong python? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/11267994/

hai mươi bốn 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress