⚠️ Ini adalah situs terjemahan tidak resmi dan tidak berafiliasi dengan ImageMagick Studio LLC. Untuk informasi resmi, lihat halaman asli (https://imagemagick.org/connected-components/).

Pelabelan komponen terhubung (connected-component labeling, disebut juga analisis komponen terhubung, ekstraksi blob, pelabelan region, penemuan blob, atau ekstraksi region) memberi label unik pada komponen yang terhubung dalam gambar. Proses pelabelan ini memindai gambar piksel demi piksel dari kiri atas ke kanan bawah untuk mengidentifikasi region piksel yang terhubung, yaitu region piksel bertetangga yang berbagi kumpulan nilai intensitas yang sama. Sebagai contoh, mari cari objek-objek pada gambar berikut:

purse

Untuk mengidentifikasi objek-objek dalam gambar ini, gunakan perintah berikut:

magick objects.gif -connected-components 4 -auto-level -depth 8 objects.png

Objek yang terdeteksi diberi label unik. Gunakan auto level untuk memvisualisasikan objek yang terdeteksi:

Objects

Statistik objek berguna untuk ditinjau. Untuk menampilkannya, gunakan perintah berikut:

magick objects.gif -define connected-components:verbose=true -connected-components 4 objects.png

Lima objek terdeteksi pada gambar sumber dengan statistik berikut:

Objects (id: bounding-box centroid area mean-color):
  0: 256x171+0+0 119.2,80.8 33117 srgb(0,0,0)
  2: 120x135+104+18 159.5,106.5 8690 srgb(255,255,255)
  3: 50x36+129+44 154.2,63.4 1529 srgb(0,0,0)
  4: 21x23+0+45 8.8,55.9 409 srgb(255,255,255)
  1: 4x10+252+0 253.9,4.1 31 srgb(255,255,255)

Tambahkan -define connected-components:exclude-header=true untuk menampilkan objek tanpa baris header. Tambahkan -define connected-components:exclude-ids=true. Gunakan -define connected-components:sort=area | width | height | x | y untuk mengurutkan objek connected-components pada output verbose. Secara default, objek diurutkan berdasarkan area secara menurun. Tambahkan -define connected-components:sort-order=increasing | decreasing untuk menentukan urutan pengurutan.

Gunakan -connected-components 8 untuk mengunjungi 8 piksel tetangga, bukan 4. Secara default, warna piksel tetangga harus persis sama agar menjadi bagian dari objek yang sama. Gunakan opsi -fuzz untuk menyertakan piksel dengan warna yang mendekati sebagai bagian dari objek.

Anda mungkin ingin menghilangkan objek-objek kecil dengan menggabungkannya ke objek tetangga yang lebih besar. Jika demikian, gunakan perintah berikut:

magick objects.gif -define connected-components:area-threshold=410 -connected-components 4 \
  -auto-level objects.jpg

Berikut adalah hasil yang diharapkan. Perhatikan bagaimana objek-objek kecil kini tergabung dengan latar belakang.

Objects

Perhatikan bagaimana dua objek digabungkan sehingga tersisa tiga objek:

Objects (id: bounding-box centroid area mean-color):
  0: 256x171+0+0 118.0,80.4 33557 srgb(0,0,0)
  2: 120x135+104+18 159.5,106.5 8690 srgb(255,255,255)
  3: 50x36+129+44 154.2,63.4 1529 srgb(0,0,0)

Secara default, gambar berlabel bersifat grayscale. Sebagai gantinya, Anda dapat mengganti warna objek pada gambar berlabel dengan mean-color dari gambar sumber. Cukup tambahkan pengaturan -define connected-components:mean-color=true ke baris perintah Anda.

Ambang batas (threshold) secara opsional dapat menyertakan rentang, misalnya -define connected-components:area-threshold=410-1600. Untuk mempertahankan objek latar belakang, identifikasikan objek tersebut dengan -define connected-components:background-id=object-id. Objek latar belakang default adalah objek dengan area terbesar.

Selain area, metrik ambang batas berikut juga didukung:

  • connected-components:angle-threshold (dari elips ekuivalen)
  • connected-components:circularity-threshold (4piarea/perimeter^2)
  • connected-components:diameter-threshold (sqrt(4*area/pi))
  • connected-components:eccentricity-threshold (dari elips ekuivalen)
  • connected-components:major-axis-threshold (diameter dari elips ekuivalen)
  • connected-components:minor-axis-threshold (diameter dari elips ekuivalen)
  • connected-components:perimeter-threshold

Anda mungkin ingin menghapus objek tertentu. Gunakan -define connected-components:remove-ids=list-of-ids (misalnya -define connected-components:remove-ids=2,4-5). Atau gunakan -define connected-components:keep-ids=list-of-ids untuk mempertahankan objek-objek ini sekaligus menggabungkan semua objek lainnya. Untuk kemudahan, Anda dapat mempertahankan objek-objek teratas, selain objek latar belakang, dengan opsi ini: -define connected-components:keep-top=number-of-objects. Alih-alih menggunakan id objek, Anda juga dapat menghapus atau mempertahankan objek berdasarkan warnanya, misalnya -define connected-components:keep-colors=red;green;blue. (Catatan penerjemah: naskah asli tertulis "there color", seharusnya "their color".)

Objek pada gambar Anda mungkin tampak homogen tetapi memiliki nilai warna yang sedikit berbeda. Secara default, hanya piksel yang cocok persis yang dianggap sebagai bagian dari objek tertentu. Untuk variasi warna kecil dalam sebuah objek, gunakan -fuzz. Contohnya,

magick star-map.png -fuzz 5% -define connected-components:verbose=true \
  -define connected-components:mean-color=true -connected-components 4 stars.gif

Komponen terhubung

Algoritme menelusuri piksel-piksel suatu komponen dalam urutan baris-kolom seperti biasa, mencari komponen di atas atau di sebelah kiri. Untuk komponen di pojok kiri atas, tidak ada komponen di atas atau di kiri untuk digabungkan. Akibatnya, ada kasus khusus yang mengharuskan Anda memutar gambar, mengulangi proses connected components, lalu memutarnya kembali. Sebagai contoh

 magick  \
  objects.gif  \
  -define connected-components:verbose=true \
  -define connected-components:area-threshold=6000 \
  -virtual-pixel None \
  -connected-components 4 -rotate 180 \
  -connected-components 4 -rotate -180 \
  objects.png