Cara Mengukur Jarak antara Dua Objek dalam Citra


Dalam sistem koordinat citra dua dimensi, jarak antara dua objek dapat diukur menggunakan persamaan euclidean distance. Berikut ini merupakan contoh aplikasi pemrograman matlab untuk mengukur jarak antara dua objek dalam citra phantom berekstensi dicom. Langkah-langkahnya adalah sebagai berikut:

1. Membaca citra phantom yang berekstensi dicom

2. Melakukan operasi thresholding citra

3. Menentukan centroid dan labelling objek

4. Mengukur jarak antara dua objek menggunakan persamaan euclidean distance dalam satuan piksel. Satuan piksel kemudian dikonversi menjadi satuan mm dengan cara membagi hasil pengukuran jarak dalam satuan piksel dengan resolusi spasial (pada contoh ini diketahui resolusi spasial citra dicom adalah sebesar 1,4798 piksel per mm). Pengukuran jarak antara objek 1 dengan objek 2 ditunjukkan pada gambar berikut:

5. Pengukuran jarak antara objek 1 dan objek 3

6. Pengukuran jarak antara objek 1 dan objek 4

7. Pengukuran jarak antara objek 2 dan objek 3

8. Pengukuran jarak antara objek 2 dan objek 4

9. Pengukuran jarak antara objek 3 dan objek 4

Tampilan source code Matlab untuk mengukur jarak antara dua objek dalam citra adalah sebagai berikut:

clc;clear;close all;
I = dicomread('slice1.dcm');
figure(1), imshow(I,[]);

BW = I>3000;
figure(2), imshow(BW,[]);

s = regionprops(BW, 'centroid');
centroids = cat(1,s.Centroid);

% labelling
[B,L] = bwboundaries(BW,'noholes');
[~,num] = bwlabel(BW,8);
figure(3), imshow(I,[])
hold on
for k = 1:num
    boundary = B{k};
    text(boundary(1,2)+20,boundary(1,1),strcat(['Object ',num2str(k)]),'Color','y',...
        'FontSize',14,'FontWeight','bold');
    plot(centroids(:,1), centroids(:,2), 'b*')
end
hold off

% object 1 & 2
x1 = centroids(1,1);
y1 = centroids(1,2);
x2 = centroids(2,1);
y2 = centroids(2,2);
figure(4), imshow(I,[])
hold on
plot([x1;x2], [y1;y2], 'r','LineWidth',3)

d_px = sum(([x1;y1]-[x2;y2]).^2).^0.5;
res = 1.4798;
d_mm = d_px/res;
text((x1+x2+20)/2,(y1+y2)/2,strcat(['d = ',num2str(d_px),' px']),'Color','y',...
    'FontSize',14,'FontWeight','bold');
text((x1+x2+20)/2,(y1+y2+40)/2,strcat(['d = ',num2str(d_mm),' mm']),'Color','y',...
    'FontSize',14,'FontWeight','bold');
hold off

% object 1 & 3
x1 = centroids(1,1);
y1 = centroids(1,2);
x3 = centroids(3,1);
y3 = centroids(3,2);
figure(5), imshow(I,[])
hold on
plot([x1;x3], [y1;y3], 'g','LineWidth',3)

d_px = sum(([x1;y1]-[x3;y3]).^2).^0.5;
res = 1.4798;
d_mm = d_px/res;
text((x1+x3+20)/2,(y1+y3)/2,strcat(['d = ',num2str(d_px),' px']),'Color','y',...
    'FontSize',14,'FontWeight','bold');
text((x1+x3+20)/2,(y1+y3+40)/2,strcat(['d = ',num2str(d_mm),' mm']),'Color','y',...
    'FontSize',14,'FontWeight','bold');
hold off

% object 1 & 4
x1 = centroids(1,1);
y1 = centroids(1,2);
x4 = centroids(4,1);
y4 = centroids(4,2);
figure(6), imshow(I,[])
hold on
plot([x1;x4], [y1;y4], 'b','LineWidth',3)

d_px = sum(([x1;y1]-[x4;y4]).^2).^0.5;
res = 1.4798;
d_mm = d_px/res;
text((x1+x4+20)/2,(y1+y4)/2,strcat('d = ',[num2str(d_px),' px']),'Color','y',...
    'FontSize',14,'FontWeight','bold');
text((x1+x4+20)/2,(y1+y4+40)/2,strcat(['d = ',num2str(d_mm),' mm']),'Color','y',...
    'FontSize',14,'FontWeight','bold');
hold off

% object 2 & 3
x2 = centroids(2,1);
y2 = centroids(2,2);
x3 = centroids(3,1);
y3 = centroids(3,2);
figure(7), imshow(I,[])
hold on
plot([x2;x3], [y2;y3], 'c','LineWidth',3)

d_px = sum(([x2;y2]-[x3;y3]).^2).^0.5;
res = 1.4798;
d_mm = d_px/res;
text((x2+x3)/2,(y2+y3-60)/2,strcat(['d = ',num2str(d_px),' px']),'Color','y',...
    'FontSize',14,'FontWeight','bold');
text((x2+x3)/2,(y2+y3-20)/2,strcat(['d = ',num2str(d_mm),' mm']),'Color','y',...
    'FontSize',14,'FontWeight','bold');
hold off

% object 2 & 4
x2 = centroids(2,1);
y2 = centroids(2,2);
x4 = centroids(4,1);
y4 = centroids(4,2);
figure(8), imshow(I,[])
hold on
plot([x2;x4], [y2;y4], 'm','LineWidth',3)

d_px = sum(([x2;y2]-[x4;y4]).^2).^0.5;
res = 1.4798;
d_mm = d_px/res;
text((x2+x4+20)/2,(y2+y4)/2,strcat(['d = ',num2str(d_px),' px']),'Color','y',...
    'FontSize',14,'FontWeight','bold');
text((x2+x4+20)/2,(y2+y4+40)/2,strcat(['d = ',num2str(d_mm),' mm']),'Color','y',...
    'FontSize',14,'FontWeight','bold');
hold off

% object 3 & 4
x3 = centroids(3,1);
y3 = centroids(3,2);
x4 = centroids(4,1);
y4 = centroids(4,2);
figure(9), imshow(I,[])
hold on
plot([x3;x4], [y3;y4], 'y','LineWidth',3)

d_px = sum(([x3;y3]-[x4;y4]).^2).^0.5;
res = 1.4798;
d_mm = d_px/res;
text((x3+x4+20)/2,(y3+y4)/2,strcat(['d = ',num2str(d_px),' px']),'Color','y',...
    'FontSize',14,'FontWeight','bold');
text((x3+x4+20)/2,(y3+y4+40)/2,strcat(['d = ',num2str(d_mm),' mm']),'Color','y',...
    'FontSize',14,'FontWeight','bold');
hold off

File source code lengkap beserta citra dicom pada pemrograman di atas dapat diperoleh melalui halaman berikut ini: Source Code

Save

Save

Posted on October 22, 2015, in Pengolahan Citra and tagged , , , , , , , , , , , , , , , , , , , , , , , . Bookmark the permalink. 53 Comments.

  1. Kanda, untuk mendapatkan citra phantom berformat dicom ??
    Bagaimana kanda ?

  2. Hasil akuisisi citra dg modalitas pesawat radiodiagnostik seperti CT-Scan, CR, MRI, USG, dll umumnya berformat dicom

  3. mas adi apakah bisa mengukur dua jarak gambar yang berformat jpg?

    • ekstensi file citra yang bisa dibaca oleh matlab adalah .tif, .tiff, .jpg, .jpeg, .gif, .bmp, .png, .xwd, .dcm
      karena semua ekstensi file tsb dapat dibaca oleh matlab, maka dapat dilakukan pengolahan termasuk mengukur jarak antar dua objek
      Tetapi, pada citra dengan ekstensi .dcm atau .tiff pada umumnya dalam file citra tersebut disertakan besarnya resolusi spasial sehingga kita dapat mengkonversi hasil pengukuran jarak yang semula dalam satuan piksel menjadi satuan panjang seperti mm, cm, inchi, dll
      Untuk ekstensi citra lainnya, apabila pada file citra tsb tidak disertakan besarnya resolusi spasial maka kita harus menghitung resolusi spasial secara manual

  4. Assalammu’alaikum mas.,.,,
    mau tanya mas.,.,
    saya kan pernah baca jurnal e jnengan untuk indentifikasi bakteri TB …
    untuk metode pengenalan dataset di ambil dari 929 bentuk bakteri TB forero 2004

    untuk download dataset tersebut di mana ya mas.,., mksh sebelum e.,.,.,

    • Waalaikumsalam
      Dataset citra bakteri tuberkulosis dapat diunduh melalui http://www.iv.optica.csic.es/resources/Software-deployment/TB_toolbox/

      Jika ingin melakukan penelitian menggunakan dataset tersebut, dianjurkan untuk mensitasi dua jurnal berikut:

      [1] M. Forero-Vargas, F. Sroubek y G. Cristóbal, “Identification of tuberculosis bacteria based on shape and color”, Real Time Imaging, 10/4, pp. 251-262, 2004.
      [2] M. Forero-Vargas, G. Cristóbal and Desco, M., “Automatic identification of Mycobacterium tuberculosis by Gaussian Mixture models”, J. Microscopy, 223, pp. 120-132, 2006

  5. ya mas.,.,.,.
    terima kasih banget………
    sangat membatu banget masukan e jnengan .,.,.,.

  6. assamalualaikum bang adi disini sya keaulitan menenrapkan nilai rta” rgb untuk di olah lagi untuk menghitung nilai jarak menggunakan euclidian diatance….mungkin bang adi ada saran…

    • waalaikumsalam zainul
      penghitungan jarak euclidean antara dua buah citra berdasarkan nilai rgb bisa menggunakan persamaan berikut
      d = sqrt((r1-r2)^2+(g1-g2)^2+(b1-b2)^2)

  7. untuk penenmpatan coding diatas dimna mz soalnya sya coba eroor

  8. jika ditera0kan di coding gmna mz…mohon masukannya mz…..

  9. [~,num] = bwlabel(BW,8);
    kodingan tersebut menggunakan bwlabel untuk memberi label objek pada citra. yang saya tanyakan untuk apa angka 8 itu??
    terima kasih

  10. assalamualaikum,
    mas mau tanya perbedaan dari versi a dan b itu apa ya?
    kodingan diatas kn menggunakan R2015a, kalau diterapkan di R2016a bisa tidak ya?

  11. assalamualaikum mas adi,
    mas, untuk mengubah panjang pixel ke mm itu benar di bagi dg res= 1,4798 ? kog saya cari tau , dikalikan 0,26458 ya mas? (1px = 0.26458mm).
    Yang dimaksud Resolusi spasial itu apa y mas, cara mengetahui resolusi spasial citra bagaimana?
    terimakasih.

    • Waalaikumsalam kartini
      Jika yg diketahui adalah resolusi spasial (piksel/mm), maka utk mengkonversi besaran panjang dg satuan piksel mjd mm adalah dg cara membagi besaran panjang tsb dg resolusi spasial
      Tetapi jika yg diketahui adalah ukuran piksel (mm/piksel) maka besaran panjang dikalikan dg ukuran piksel shg diperoleh besaran panjang dg satuan mm

  12. boleh minta file gambar slice1.dcm .. terima kasih

  13. Muhammad R. Zacky

    mas mau taya kenapa res = 1.4798; ???

  14. emilfitranshah

    mas saya mau tanya, untuk mendapatkan titik-titik itu jika di terapkan pada wajah gimana cara filternya ya mas, dan pakai metode apa?

  15. Assalamu’alaikum
    mas maaf mau tanya, kalau untuk mengukur resolusi spasial dengan metode LSF dan ESF pakai Matlab bagaimana yaa mas ?

  16. bang,
    kalau metode JST untuk deteksi penyakit tanaman apa bg?

  17. Kak maaf mau tanya lagi..
    Perbedaan curve fitting dan curve fitting Toolbox apa yaa? Atau sama saja?

  18. maaf Kak mau tanya lagi….
    E(x)=1/2+[1/π tan ^(-1) (λ(x-x_0 ))]

    cara menuliskan persamaan ini d Matlab, begini atau bukan yaa?

    E(x)=0.5+(0.318*tan^-1*(lamda*(x-x0)))

  19. baik Kak terimakasih… Maaf yaaa kak banyak tanya…

  20. Pratama Nugraha Angga

    kak mau tanya,

    misalkan nih saya pakai di telapak kaki,
    nah cara menentukan titik titik yang akan dihitung dengan cara apa ya kak ?

  21. maaf kak mau tanya. misal dalam citra ada 5 objek. lalu kita ingin mendeteksi secara otomatis sebuah objek yang memiliki jarak tertentu dari objek referensi yang berada di tengah2. caranya gimana kak? terima kasih

  22. bg mau tanya format citra saya bmp, bagaimana cara merubahnya ke dicom atau dcmnya bg? mohon solusinya bg. terima kasih

  23. kak, maaf mau nanya kalau dijadikan perulangan karena jumlah objeknya banyak bagaimana kak? terus dibagi dengan banyaknya jarak

  24. mas adi, saya mau tanya peletakkanteks objek itu bisa dirubah enggak sesuai urutan itu bisa enggak ya mas? kalau bisa, itu bagaimana caranya ya mas?

  25. Mas mau tanya, kalau mengukur panjang dan lebar pada siluet bisa menggunakan metode ini ga?, Apa bisa digunakan untuk memploting bagian tubuh

  26. Mas mau tanya, kalau mengukur panjang dan lebar pada siluet bisa menggunakan metode ini ga?, Apa bisa digunakan untuk memploting bagian tubuh

  27. assalamualaikum, mas mau tanya kalau membentuk telapak kaki agar bisa ditampilkan itu bagaimana ya mas?

  28. Bagaimana cara menghitung diameter horizontal kanker dalam citra?
    Mohon responnya bg

  29. kalau mengukur 3D bisa ga bang?.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: