tôi sử dụng để làm điều này loại phân tích trên ảnh hiển vi và cuối cùng đưa tất cả những gì cần thiết vào một xử lý hình ảnh và gói phân tích được viết bằng C, được điều khiển thông qua Tcl. (Nó chỉ hoạt động với 512 x 512 hình ảnh, điều này giải thích tại sao 512 cây lại thường xuyên. Có những hình ảnh có kích thước khác nhau được phân bổ, nhưng hầu hết công việc được thực hiện với pixel 8 bit. 0xff và số lượng có ý nghĩa tối đa là 254 trên hình ảnh.)
Tóm lại, 'zz' ở đầu các lệnh Tcl gửi phần còn lại của dòng đến trình phân tích cú pháp của gói. Ngay sau 'zz' là một đối số cho biết đầu vào và đầu ra của lệnh. (Có thể có nhiều đầu vào nhưng chỉ có một đầu ra duy nhất.) 'R' cho biết hình ảnh 512 x 512 x 8-bit. Từ thứ ba là tên của lệnh được gọi; 'biểu đồ' đánh dấu một hình ảnh như được mô tả trong văn bản bên dưới. Vì vậy, 'zz rr graphs' có nghĩa là 'Gọi trình phân tích cú pháp ZZ; nhập một hình ảnh r vào lệnh đồ thị và lấy lại một hình ảnh r. ' Phần còn lại của dòng lệnh Tcl chỉ định hình ảnh được phân bổ trước nào để sử dụng. (Hình ảnh 'g' là ROI, tức là khu vực quan tâm, hình ảnh; hầu như tất cả các hoạt động của ZZ đều được thực hiện dưới sự kiểm soát ROI.) Vì vậy, 'r1 r1 g8' có nghĩa là 'Sử dụng r1 làm đầu vào, sử dụng r1 làm đầu ra (có nghĩa là, đánh dấu chính hình ảnh đầu vào) và thực hiện thao tác ở bất cứ nơi nào pixel tương ứng trên hình ảnh g8 --- tức là, r8, được sử dụng làm ROI --- là> 0.
Tôi không nghĩ rằng nó có sẵn trực tuyến ở bất cứ nơi nào, nhưng nếu bạn muốn chọn thông qua mã nguồn hoặc thậm chí biên dịch toàn bộ shebang, tôi sẽ rất vui khi gửi cho bạn. Dưới đây là một đoạn trích từ hướng dẫn sử dụng (nhưng tôi nghĩ rằng tôi thấy một số lỗi trong hướng dẫn tại ngày trễ này --- đó là đáng xấu hổ ...):
Ví dụ 6. Tính năng đếm.
Sự cố
Đếm là một tác vụ phổ biến. Các mục được tính được gọi là "tính năng" và thường cần phải chuẩn bị hình ảnh một cách cẩn thận để các đối tượng địa lý tương ứng theo cách một chiều với những thứ thực sự được tính. Ở đây, tuy nhiên, chúng tôi bỏ qua việc chuẩn bị hình ảnh và xem xét, thay vào đó, cơ chế đếm.Bài tập đếm đầu tiên là tìm hiểu xem có bao nhiêu tính năng trên hình ảnh trong thư mục ./cells?
Phương pháp tiếp cận
Trước tiên, chúng ta hãy định nghĩa "tính năng". Một đối tượng địa lý là nhóm lớn nhất của các pixel “set” (không khác), tất cả đều có thể đạt được bằng cách di chuyển từ một pixel này sang pixel khác dọc theo các tuyến đường bắc-nam-đông-tây (lên-xuống-phải-trái), bắt đầu từ một điểm ảnh đã cho. Lệnh zz phát hiện và đánh dấu các đối tượng trên hình ảnh là “biểu đồ zz rr R: src R: đích G: ROI”, được gọi là vì thuật ngữ toán học cho một đối tượng như vậy là “đồ thị”. Nếu tất cả các pixel trên một hình ảnh được đặt, thì chỉ có một biểu đồ trên hình ảnh, nhưng nó chứa 262144 pixel (512 * 512). Nếu pixel được đặt và rõ ràng (bằng 0) trong mẫu bàn cờ, thì sẽ có đồ thị 131072 (512 * 512/2), nhưng mỗi pixel sẽ chỉ chứa một pixel. Giải thích ngắn gọn, “biểu đồ zz rr” bắt đầu ở góc trên bên trái của hình ảnh và quét từng hàng thành công từ trái sang phải cho đến khi tìm thấy pixel được đặt, sau đó tìm tất cả các điểm ảnh được đặt ở phía bắc, nam, đông , hoặc biên giới phía tây ("4 kết nối"). Sau đó, nó đặt tất cả các pixel trong biểu đồ đó thành 1 (0x01). Sau khi tìm và đánh dấu biểu đồ 1, nó bắt đầu quét lại tại điểm ảnh sau điểm ảnh đầu tiên phát hiện biểu đồ 1, lần này bỏ qua bất kỳ pixel nào đã thuộc về biểu đồ. 254 đồ thị đầu tiên mà nó tìm thấy sẽ được đánh dấu duy nhất; Tuy nhiên, tất cả các đồ thị được tìm thấy sau đó sẽ được đánh dấu bằng giá trị 255 (0xff) và do đó không thể phân biệt được với nhau. Chìa khóa để có thể đếm bất kỳ số lượng đồ thị chính xác là xử lý từng hình ảnh theo từng giai đoạn, nghĩa là tìm số lượng đồ thị trên hình ảnh và nếu số lớn hơn 254, xóa 254 đồ thị vừa tìm thấy, lặp lại cho đến khi tìm thấy 254 hoặc ít hơn các đồ thị. Ngôn ngữ Tcl cung cấp các phương tiện để thiết lập quyền kiểm soát hoạt động này.
Hãy bắt đầu xây dựng các lệnh cần thiết bằng cách đọc tệp hình ảnh ZZ thành hình ảnh R và phát hiện và đánh dấu biểu đồ. Trước vòng lặp xử lý, chúng tôi khai báo và không phải là biến để giữ tổng số đối tượng địa lý trong chuỗi hình ảnh. Trong vòng lặp xử lý, chúng ta bắt đầu bằng cách đọc tệp hình ảnh thành một hình ảnh R và phát hiện và đánh dấu các biểu đồ.
zz ur to $inDir/$img r1
zz rr graphs r1 r1 g8
Tiếp theo, chúng tôi không có một số biến để theo dõi số lượng, sau đó sử dụng lệnh "tối đa" để tìm hiểu xem hơn 254 đồ thị đã được phát hiện hay chưa.
set nGraphs [ zz ra max r1 a1 g1 ]
Nếu nGraphs làm bằng 255 thì 254 tính chính xác đồ thị nên được thêm vào tổng số, các đồ thị từ 1 đến 254 nên được xoá hoàn toàn, và các tính lặp đi lặp lại cho bao nhiêu lần vì nó cần thiết để giảm số đồ thị dưới 255.
while {$nGraphs == 255} {
incr sumGraphs 254
zz rbr lt r1 155 r1 g1 0 255
set sumGraphs 0
zz rr graphs r1 r1 g8
set nGraphs [ zz ra max r1 a1 g8 ]
}
Khi vòng lặp “while” thoát ra, biến nGraphs phải giữ số nhỏ hơn 255, tức là một số đồ thị được tính chính xác; điều này được thêm vào tổng số tăng của số lượng đối tượng trong chuỗi hình ảnh.
incr sumGraphs $nGraphs
Sau vòng lặp xử lý, in tổng số tính năng tìm thấy trong chuỗi.
puts “Total number of features in $inDir \
images $beginImg through $endImg is $sumGraphs.”
Sau vòng lặp xử lý, in tổng số tính năng tìm thấy trong chuỗi.
Nhận dạng đối tượng đơn giản có vẻ như mâu thuẫn với tôi. – Joren
Bạn sẽ đề xuất điều gì khác? –
Vui lòng không nói "đã giải quyết" trong câu hỏi của bạn. Hoặc là chấp nhận câu trả lời hay nhất hoặc trả lời câu hỏi của bạn và chấp nhận câu hỏi đó. – Soviut