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 bwlabel
lại để có sự khác biệt giữa cả hai.
Biện pháp của tôi là sử dụng bwmorph
, Dilate
là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], imfill
dườ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 :(
Mã
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 :