Menghitung jumlah objek yang berpotongan dengan batas gambar di MATLAB

9

Saya memiliki gambar RGB dengan berbagai tanda. Tujuan utama saya adalah menghitung tanda-tanda yang bersinggungan dengan batas gambar.

Pendekatan dan masalah

Saya mulai dengan memuat gambar [Gbr. 1], lalu mengonversinya menjadi skala abu-abu dan menerapkan filter median untuk menghilangkan beberapa noise [Gbr. 2]. Lalu saya binariasikan dengan ambang batas 0,2, yang menghasilkan Gambar 3. Pada saat ini saya mendapatkan gambar binarisasi saya, tetapi masalahnya adalah bahwa beberapa bagian yang memiliki tanda yang sama muncul di berbagai daerah, bukan hanya satu. Sekarang tujuan saya adalah untuk menggabungkan daerah-daerah yang memiliki objek yang sama, jadi saya bisa gunakan bwlabeluntuk menghitung berapa banyak tanda yang ada dalam gambar, dan gunakan imclearborderuntuk menghilangkan yang ada di perbatasan, dan gunakan bwlabellagi untuk mendapatkan perbedaan antara keduanya

Pendekatan saya adalah menggunakan bwmorph, Dilateuntuk melebarkan objek dan kemudian mencoba untuk mengisinya dengan imfill, holes. Tetapi masalahnya adalah jika saya melebarkannya dalam jumlah kecil [Gbr. 4], imfillsepertinya tidak mengisinya, jika saya melebarkannya dengan jumlah besar [Gambar 5] semua objek mulai bergabung :(

Kode

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)

Tokoh

Fig 1 :

Fig 1 http://dl.dropbox.com/u/5272012/1.png

Fig 2 :

fig 2 http://dl.dropbox.com/u/5272012/2.png

Fig 3 :

fig 3 http://dl.dropbox.com/u/5272012/3.png

Fig 4 :

gbr 4 http://dl.dropbox.com/u/5272012/4.png

Fig 5 :

fig 5 http://dl.dropbox.com/u/5272012/5.png

Rui Trovisco
sumber
Pertanyaan saya adalah apa yang sebenarnya memberitahu Anda bahwa tanda itu rusak? Bagaimana Anda benar-benar ingin menempatkan output? maksud saya - apakah Anda hanya ingin mewarnai semua tanda yang terpotong? atau apakah Anda benar-benar ingin mendaftar setiap tanda dan mengklasifikasikan cut / full?
Dipan Mehta

Jawaban:

3

Menurut pendapat saya, erosi pelebaran adalah alat yang sangat mendasar. Anda memiliki basis informasi yang sangat kuat dan gambar input yang cukup layak untuk membuat keputusan seperti itu.

Inilah pandangan saya:

  1. Mengingat keberhasilan yang masuk akal yang telah Anda tunjukkan berubah dari Gambar 1 ke 3, Anda dapat mengidentifikasi dan mengelompokkan tanda-tanda individual.

  2. Dengan asumsi bahwa Anda telah mengetahui tanda-tanda sebelumnya, Anda dapat menerapkan algoritma cepat yang layak untuk melakukan pencocokan pola. Dalam kasus jika pola yang tepat tidak diketahui - Anda bisa mengidentifikasi bentuk luar dari pola tersebut.

  3. Berdasarkan klasifikasi, Anda selalu dapat menentukan centroid dari setiap pola yang cocok dan lebar serta tinggi masing-masing. Jika centroid X, posisi Y terlalu dekat dengan perbatasan - mis. atau berada di luar tepi, sama halnya Anda dapat menerapkan untuk sumbu Y juga.c e n t r o i d ( x ) > i m a g e w i d t h - s h a p e w i d t hcentroid(x)<0centroid(x)>imagewidthshapewidth

  4. Mengingat bahwa Anda hanya khawatir tentang apa yang jatuh di tepi - Anda harus mulai dengan masing-masing tepi saja dan mulai pencocokan pola di sana. Mulai cocok dengan parsial pola / bentuk dan jika parsial pola / bentuk melakukan pertandingan yang objek IS dipotong di tepi.

Berikut adalah beberapa referensi yang dapat membantu Anda merumuskan masalah dengan baik.

Makalah ini sangat baik untuk memahami banyak dasar-dasar tentang Tanda / token yang Anda hadapi.

Anil K. Jain dan Aditya Vailaya Pengambilan Berdasarkan Bentuk: Studi Kasus dengan Database Gambar Merek Dagang Pengenalan pola 1998, vol. 31, no9, hlm. 1369-1390

Ada banyak elemen penelitian yang berhubungan dengan pencocokan bentuk / pola parsial atau tertutup.

Eli Saber, Yaowu Xu, A. Murat Tekalp Pengenalan bentuk sebagian oleh pencocokan sub-matriks untuk pelabelan gambar dengan panduan pencocokan sebagian, Pattern Recognition 38 (2005) 1560 - 1573

Akan memperluas jawaban ini untuk kueri yang lebih spesifik jika Anda mengambil pendekatan ini.

Dipan Mehta
sumber
Hei! Saya tidak dapat menggunakan pencocokan pola karena itu akan memakan waktu yang sangat lama dan terlalu banyak pekerjaan komputasi. Juga skala objek (tanda-tanda), bisa variabel (profesor memberi kita gambar acak di mana skala f tanda-tanda bisa sangat dari + 30% hingga -30%, jadi pencocokan pola tidak berguna. Saya perlu pendekatan yang lebih cepat dalam untuk memecahkan yang satu ini
Rui Trovisco
@RuiTrovisco Saya mengerti ini. Itulah sebabnya saya agak menulis - saya akan meningkatkan jawaban berdasarkan umpan balik Anda. Saya telah memberikan beberapa komentar pada pertanyaan Anda. Silakan kembali ke sana.
Dipan Mehta
1

Berikut adalah sedikit inspirasi yang menunjukkan kebalikan dari apa yang Anda cari.

Mulai dengan 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));

masukkan deskripsi gambar di sini

Mola
sumber