Đếm số lượng đối tượng được giao nhau bởi viền hình ảnh trong MATLAB


9

Tôi có một hình ảnh RGB với các dấu hiệu khác nhau. Mục tiêu chính của tôi là đếm các dấu hiệu tiếp xúc với đường viền hình ảnh.

Cách tiếp cận và vấn đề

Tôi bắt đầu bằng cách tải hình ảnh [Hình. 1], sau đó chuyển đổi nó thành thang độ xám và áp dụng bộ lọc trung vị để loại bỏ nhiễu [Hình. 2]. Sau đó, tôi đã binarized nó với ngưỡng 0,2, kết quả là Hình 3. Lúc này tôi đã có hình ảnh nhị phân của mình, nhưng vấn đề là một số phần thuộc cùng một dấu hiệu xuất hiện ở nhiều vùng khác nhau, thay vì chỉ một. Bây giờ mục tiêu của tôi là hợp nhất các vùng thuộc cùng một đối tượng, do đó tôi có thể sử dụng bwlabelđể đếm xem có bao nhiêu dấu hiệu trong ảnh và sử dụng imclearborderđể loại bỏ các vùng trong đường viền và sử dụng bwlabellại để có sự khác biệt giữa cả hai.

Biện pháp của tôi là sử dụng bwmorph, Dilatelàm giãn các đối tượng và sau đó cố gắng lấp đầy chúng với imfill, holes. Nhưng vấn đề là nếu tôi làm giãn chúng với một lượng nhỏ [Hình. 4], imfilldường như không lấp đầy chúng, nếu tôi làm giãn chúng ra một lượng lớn [Hình 5] tất cả các đối tượng bắt đầu hợp nhất :(

img=im2double(imread('image.png')); figure, imshow(img) 
img_gray=rgb2gray(img); imshow(img_gray);                                 
img_mediana=medfilt2(img_gray, [3 3]); figure, imshow(img_mediana);       
img_bin=im2bw(img_mediana, 0.2); imshow(img_bin)
img_dilate=bwmorph(img_bin, 'Dilate', 10); imshow(img_dilate)
img_fill=imfill(img_dilate, 'Holes'); figure, imshow(img_fill)

Số liệu

Hình 1 :

Hình 1 http://dl.dropbox.com/u/5272012/1.png

Hình 2 :

hình 2 http://dl.dropbox.com/u/5272012/2.png

Hình 3 :

hình 3 http://dl.dropbox.com/u/5272012/3.png

Hình 4 :

hình 4 http://dl.dropbox.com/u/5272012/4.png

Hình 5 :

hình 5 http://dl.dropbox.com/u/5272012/5.png


Câu hỏi của tôi là những gì chính xác cho bạn biết rằng dấu hiệu bị hỏng? Làm thế nào để bạn thực sự muốn đặt đầu ra? ý tôi là - bạn chỉ muốn Colorize tất cả các dấu hiệu được cắt? hoặc bạn thực sự muốn liệt kê từng dấu hiệu và phân loại cắt / đầy đủ?
Dipan Mehta

Câu trả lời:


3

Theo tôi, xói mòn giãn nở là những công cụ rất cơ bản. Bạn có một cơ sở thông tin rất mạnh và một hình ảnh đầu vào khá tốt để đưa ra quyết định như vậy.

Đây là quan điểm của tôi:

  1. Đưa ra một thành công hợp lý mà bạn đã thể hiện từ Hình 1 đến 3, bạn có thể xác định và phân đoạn các dấu hiệu riêng lẻ.

  2. Giả sử rằng bạn đã biết các dấu hiệu trước, bạn có thể áp dụng một thuật toán nhanh khá để thực hiện khớp mẫu. Trong trường hợp nếu các mẫu chính xác không được biết - bạn chỉ có thể xác định hình dạng bên ngoài của mẫu.

  3. centroid(x)<0centroid(x)>imagewidthshapewidth

  4. Cho rằng bạn chỉ quan tâm đến những gì rơi vào cạnh - bạn chỉ nên bắt đầu với mỗi cạnh và bắt đầu khớp mẫu ở đó. Bắt đầu khớp với mẫu / hình dạng một phần và nếu mẫu / hình dạng một phần không khớp với đối tượng IS bị cắt trên cạnh.

Dưới đây là một số tài liệu tham khảo có thể giúp bạn hình thành vấn đề tốt.

Bài viết này là rất tốt để hiểu rất nhiều điều cơ bản về Dấu hiệu / mã thông báo bạn đang xử lý.

Anil K. Jain và Aditya Vailaya Truy xuất dựa trên hình dạng: Một nghiên cứu tình huống với nhận dạng mẫu cơ sở dữ liệu hình ảnh nhãn hiệu 1998, vol. 31, số 9, trang 1369-1390

Có nhiều yếu tố nghiên cứu liên quan đến khớp hình dạng / mẫu một phần hoặc bị chặn.

Eli Saber, Yaowu Xu, A. Murat Tekalp Nhận dạng hình dạng một phần bằng cách so khớp ma trận phụ để phù hợp với một phần ghi nhãn hình ảnh được hướng dẫn Nhận dạng mẫu 38 (2005) 1560 - 1573

Sẽ mở rộng câu trả lời này cho các truy vấn cụ thể hơn nếu bạn thực hiện phương pháp này.


Chào! Tôi không thể sử dụng khớp mẫu vì điều đó sẽ mất nhiều thời gian và quá nhiều công việc tính toán. Ngoài ra tỷ lệ của các đối tượng (dấu hiệu), có thể thay đổi (giáo sư cung cấp cho chúng tôi hình ảnh ngẫu nhiên trong đó tỷ lệ f các dấu hiệu có thể rất từ ​​+ 30% đến -30%, do đó, một mô hình khớp là vô ích. Tôi cần một cách tiếp cận nhanh hơn để giải quyết vấn đề này.
Rui Trovisco

@RuiTrovisco Tôi hiểu điều này. Đó là lý do tại sao tôi đã viết - tôi sẽ cải thiện câu trả lời dựa trên phản hồi của bạn. Tôi đã đặt một số ý kiến ​​về câu hỏi của bạn. Vui lòng hoàn nguyên ở đó.
Dipan Mehta

1

Dưới đây là một chút cảm hứng cho thấy điều ngược lại với những gì bạn đang tìm kiếm.

Bắt đầu với fig3.

% Find background
labels = bwlabel(~fig3);
[n,idx] = hist(labels(:),0:max(labels(:)));
[bgrSize bgrLableIdx] = max(n);
bgr = (labels == idx(bgrLableIdx));
bgr = imopen(bgr,strel('disk',3));

% Remove border objects and cleanup
borderCleared = imclearborder(~bgr);
borderCleared = imopen(borderCleared,strel('disk',3));

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

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.