Cách tốt nhất để phân chia tĩnh mạch trong lá?


47

Tôi đã thực hiện rất nhiều nghiên cứu và tìm ra các phương pháp như đập thích ứng, đầu nguồn, vv có thể được sử dụng để phát hiện các tĩnh mạch trong lá. Tuy nhiên, ngưỡng không tốt vì nó gây ra nhiều tiếng ồn

Tất cả hình ảnh của tôi đều là hình ảnh màu xám, xin vui lòng bất cứ ai có thể đề xuất phương pháp tiếp cận trong khi xem xét vấn đề này trong nhu cầu giúp đỡ khẩn cấp

EDIT: Hình ảnh gốc của tôi

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

Sau khi đập

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

Theo đề xuất của câu trả lời tôi đã thử phát hiện cạnh sau

  1. Khôn ngoan

Quá nhiều tiếng ồn và nhiễu loạn không mong muốn

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

  1. Sobel

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

  1. Roberts

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

EDIT: Đã thử một thao tác nữa tôi nhận được kết quả sau tốt hơn so với những gì tôi đã thử với canny và thích nghi Bạn cảm thấy thế nào?

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


Bạn có thể vui lòng cho chúng tôi xem một số hình ảnh?
Jonas

Tôi đã thêm hình ảnh
vini

@vini Bạn hiện đang làm điều này như một bước xử lý trước để có được một mẫu phù hợp tốt sau này? Ngoài ra, làm thế nào bạn có được hình ảnh thứ hai, thông qua ngưỡng đơn giản?
Spacey

Mục đích của tôi là để có được kết quả tốt nhất có thể trong việc phân chia các tĩnh mạch sao cho đầu ra của tôi không chứa các tạo tác đi lạc, tôi đã sử dụng ngưỡng thích ứng để có được hình ảnh thứ hai
vini

Từ những hình ảnh bạn đã đưa ra, có vẻ như bạn đang sử dụng các bộ lọc (khác nhau) trên một hình ảnh ngưỡng. Điều này sẽ cho kết quả cực kỳ kém. Bạn nên sử dụng các bộ lọc trên ảnh gốc , sau đó ngưỡng đầu ra của chúng.
Stewohn

Câu trả lời:


56

Bạn không tìm kiếm các cạnh (= viền giữa các khu vực mở rộng có giá trị xám cao và thấp), bạn đang tìm các đường vân (đường mỏng tối hơn hoặc sáng hơn vùng lân cận của chúng), vì vậy bộ lọc cạnh có thể không lý tưởng: Bộ lọc cạnh sẽ cung cấp cho bạn hai sườn (một ở mỗi bên của dòng) và phản hồi thấp ở giữa dòng:

mẫu lọc

THÊM : Nếu đã được yêu cầu giải thích sự khác biệt giữa máy dò cạnh và máy dò sườn rõ ràng hơn. Tôi xin lỗi trước nếu câu trả lời này đang trở nên rất dài.

Một máy dò cạnh là (thường) một toán tử đạo hàm đầu tiên: Nếu bạn tưởng tượng hình ảnh đầu vào là một cảnh quan 3D, thì một máy dò cạnh đo độ dốc của độ dốc tại mỗi điểm của cảnh quan đó:

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

Nếu bạn muốn phát hiện đường viền của vùng sáng hoặc tối kéo dài, điều này là tốt. Nhưng đối với các tĩnh mạch trong hình ảnh của OP, nó sẽ cung cấp cho bạn giống nhau: các đường viền bên trái và bên phải của mỗi tĩnh mạch:

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

Điều đó cũng giải thích "mẫu đường đôi" trong kết quả dò cạnh Canny:

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

Vì vậy, làm thế nào để bạn phát hiện những đường mỏng này (tức là những đường vân), sau đó? Ý tưởng là các giá trị pixel có thể được xấp xỉ (cục bộ) theo đa thức bậc 2, tức là nếu hàm hình ảnh là , thì đối với các giá trị nhỏ của và :xgxy

g(x,y)12x22gx2+xy2gxy+12y22gy2+xgx+ygy+g(0,0)

hoặc, ở dạng ma trận:

g(x,y)12(xy).(2gx22gxy2gxy2gy2).(xy)+(xy).(gxgy)+g(0,0)

Ma trận đạo hàm bậc hai được gọi là " Ma trận Hessian ". Nó mô tả cấu trúc bậc 2 mà chúng ta quan tâm.(2gx22gxy2gxy2gy2)

Phần thứ 2 của hàm này có thể được chuyển thành tổng của hai parabon được quay bởi một góc nào đó, bằng cách phân tách ma trận Hessian ở trên thành một phép quay chéo ma trận chéo của nó ( Phân rã ma trận ). Chúng tôi không quan tâm đến việc xoay vòng (chúng tôi muốn phát hiện các đường vân theo bất kỳ hướng nào), vì vậy chúng tôi chỉ quan tâm đến vàλ1x2+λ2y2λ1λ2

Hàm gần đúng này có thể có dạng hình gì? Trên thực tế, không nhiều:

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

Để phát hiện các đường vân, chúng tôi muốn tìm các khu vực trong hình ảnh trông giống như các ô cuối cùng ở trên, vì vậy chúng tôi đang tìm kiếm các khu vực có giá trị riêng lớn của Hessian (so với giá trị riêng nhỏ). Cách đơn giản nhất để phát hiện đó là chỉ tính toán giá trị riêng tại mỗi pixel - và đó là những gì bộ lọc sườn dưới đây thực hiện.


Một bộ lọc sườn núi có thể sẽ cho kết quả tốt hơn. Tôi đã thử tích hợp sẵn của Mathicala RidgeFilter(tính toán giá trị riêng của ma trận Hessian ở mỗi pixel) trên hình ảnh của bạn:

bộ lọc sườn núi

Như bạn có thể thấy, chỉ có một đỉnh duy nhất cho mỗi vạch tối mỏng. Sản lượng Binarizing và skeletonizing:

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

Sau khi cắt tỉa bộ xương và loại bỏ các thành phần nhỏ (nhiễu) khỏi hình ảnh, tôi nhận được bộ xương cuối cùng này:

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

Mã Mathicala đầy đủ:

ridges = RidgeFilter[ColorNegate@src];
skeleton = SkeletonTransform[Binarize[ridges, 0.007]];
DeleteSmallComponents[Pruning[skeleton, 50], 50]

THÊM VÀO:

Tôi không phải là chuyên gia Matlab, tôi không biết liệu nó có bộ lọc sườn núi tích hợp hay không, nhưng tôi có thể chỉ cho bạn cách triển khai "bằng tay" (một lần nữa, sử dụng Matematica). Như tôi đã nói, bộ lọc sườn núi là giá trị riêng của ma trận Hessian. Tôi có thể tính toán giá trị biểu tượng đó trong Mathicala:

eigenvalue=Last[Eigenvalues[(HxxHxyHxyHyy)]]

=>12(Hxx+Hyy+Hxx2+4Hxy22HxxHyy+Hyy2)

Vì vậy, những gì bạn phải làm là tính toán các đạo hàm thứ hai , , (sử dụng sobel hoặc đạo hàm của bộ lọc gaussian) và chèn chúng vào biểu thức trên và bạn đã có bộ lọc sườn núi của mình. H xy H yyHxxHxyHyy


Vâng, đó chính xác là những gì tôi muốn tuy nhiên tôi đang thực hiện nó trong MATLAB và việc tìm kiếm một bộ lọc tương đương đã trở nên khó khăn
vini

1
@nikie Câu trả lời rất hay - câu hỏi - bạn có thể giải thích rõ hơn về sự khác biệt giữa máy dò cạnh và máy dò sườn cho những người không xử lý ảnh không? Cảm ơn một lần nữa
Spacey

@Mohammad: Tôi đã thử, tôi hy vọng tôi đã làm cho nó rõ ràng hơn một chút, bất chấp toán học
Niki Estner

tôi đã thử bộ lọc sườn núi không cho kết quả khả quan
vini

2
@vini: "không cho kết quả khả quan" không thực sự cho tôi biết nhiều. Bạn có nhận được hình ảnh kết quả giống như tôi đã đăng không? "Không thỏa đáng" là gì?
Niki Estner

6

Khi sử dụng phát hiện cạnh Canny (trong Halcon), với alpha là 1 và ngưỡng thấp 8 và ngưỡng 13 cao (trên thang điểm 1-255), tôi nhận được kết quả như sau:

Lá phát hiện cạnh Canny

Với việc điều chỉnh các tham số, kết quả bạn nhận được từ Canny có thể được cải thiện hơn nhiều. Sử dụng hình ảnh này, bạn có thể bỏ qua các cạnh ngắn để loại bỏ nhiễu và kết nối các cạnh dài cho kết quả cuối cùng.

BTW: một màu khác nhau chỉ ra một cạnh khác.

Tôi có thể nhận được một kết quả khá giống nhau bằng cách sử dụng trình phát hiện cạnh Canny trực tuyến này :

  • Chọn ảnh I9Pxl.png
  • Sigma 1.2
  • T-thấp 0,04
  • Cao 0,07
  • Cài đặt khác mặc định
  • Nhấp vào xem cập nhật cho kết quả

Cảm ơn :) Tôi đoán Canny chỉ là người giỏi nhất;) Btw, áp dụng Canny vào kết quả của bạn có thể mang lại kết quả thậm chí tốt hơn ..
Geerten

BTW: Nếu bạn chưa nhận thấy: Những hạn chế của máy dò cạnh Canny là gì? Bạn có thể đưa ra quan điểm của bạn ở đây!
Dipan Mehta

Nếu bạn đang nói với tôi: Tôi đã đưa ra quan điểm của mình về câu hỏi của bạn..Nếu bạn đang đưa ra nhận xét chung: Tôi sẽ xóa nhận xét này.
Geerten

Ồ vâng, - tôi đã không nhận ra điều này!
Dipan Mehta

Cảm ơn câu trả lời của bạn tuy nhiên canny không lưu giữ các chi tiết tốt của tĩnh mạch trong lá mà không được phát hiện như bạn đã trình bày ...
vini

6

Tiếp theo từ câu trả lời xuất sắc ở trên, đây là cách thực hiện trong python bằng cách sử dụng funcitons scikit.

from skimage.feature import hessian_matrix, hessian_matrix_eigvals

#assume you have an image img

hxx, hxy, hyy = hessian_matrix(img, sigma=3)
i1, i2 = hessian_matrix_eigvals(hxx, hxy, hyy)

#i2 is the variable you want.

#Visualise the result
import matplotlib.pyplot as plt
plt.imshow(i2)

Có gì imgnên được? Tôi có một pngtập tin và nó không hoạt động.
Sigur

img nên là một mảng numpy 2d.
Matthew Shun-Shin

Trên thực tế, i1giá trị bản địa lớn hơn, vì vậy bạn nên sử dụng giá trị đó.
Rob

Đây là lời giải thích rõ ràng nhất mà tôi từng thấy!
Eureka

3

Thay vì ngưỡng, tôi đã áp dụng phát hiện cạnh đơn giản.

GIMP được sử dụng với sự khác biệt của Gaussian - Radious Outer: 3.0 và Inside: 1.0.

Đây là cách nó trông như thế nào.

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

Bạn có thể áp dụng thêm bộ lọc trung bình hoặc xói mòn / giãn nở để bạn có thể loại bỏ một số nhiễu hạt.

Đây là trang giải thích việc thực hiện của gimp.

Bạn nên tham khảo các kỹ thuật khác nhau như Laplacian của Gaussian hoặc Sự khác biệt của Gaussin, v.v ... Xem điều này: http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm#7

Và câu trả lời này Laplacian được sử dụng cho Unsharp Mask như thế nào?


GIMP? là máy dò cạnh nào?
vini

1
Không - đó là gói chỉnh sửa hình ảnh. Đó là một kiểm tra nhanh - chỉ để đưa một điểm về phía trước.- sử dụng phát hiện cạnh thay vì ngưỡng.
Dipan Mehta

GIMP sử dụng máy dò cạnh nào? tôi xin lỗi có rất ít kiến ​​thức về nó
vini

@vini thêm tài liệu tham khảo.
Dipan Mehta

3

Chủ đề này luôn thu hút rất nhiều sự quan tâm, và chưa có sự đồng thuận thực sự nào về chủ đề này. Vì vậy, tôi quyết định bỏ một vài từ.

Câu trả lời của tôi cho những câu hỏi tương tự trước đây về stackexchange ( Q1Q2 ) liên quan đến thuật toán trích xuất cấu trúc đường cong subpixel của Steger. Phương pháp này thực hiện hợp lý tốt trong nhiều trường hợp và may mắn, bao gồm cả phương pháp này. Do đó, tôi đăng hình ảnh đầu ra ở đây: nhập mô tả hình ảnh ở đây và ở đây với một cài đặt tham số khác và không có màu kết nối: nhập mô tả hình ảnh ở đây Để biết chi tiết và tham chiếu thích hợp, vui lòng xem các bài đăng stackexchange tôi đã đề cập.


0

Là một phần của năm cuối cùng của bài tập nghiên cứu kỹ thuật, tôi đã phải nghiên cứu các phương pháp phân đoạn cho các mạch máu trong hình ảnh đáy mắt. Tôi thấy phương pháp tái tạo cây này (của Cohen, Laurent D. và Mille, Julien đặc biệt thú vị khi sử dụng cùng với Phương pháp di chuyển nhanh.

Các giấy tờ khác bạn có thể muốn xem xét:

  • Đường viền hoạt động trắc địa
  • Về việc thực hiện các phương pháp diễu hành nhanh cho mạng 3D
  • Đa bút chì FMM: một giải pháp chính xác cao cho phương trình Eikonal trên các miền Cartesian

Liên kết hữu ích: - Tuyên truyền phía trước trong 2D và 3D

Tôi hy vọng điều này sẽ giúp một chút, mặc dù nó không chính xác là nghệ thuật.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.