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
Posted on October 22, 2015, in Pengolahan Citra and tagged aplikasi matlab pengolahan citra medis, aplikasi pengolahan citra medis matlab, cara membaca citra dicom matlab, cara menghitung jarak objek dalam citra matlab, cara mengukur jarak citra matlab, cara thresholding citra digital matlab, citra dicom, citra dicom matlab, coding perhitungan jarak citra matlab, contoh aplikasi pengolahan citra dengan matlab, contoh aplikasi pengolahan citra digital menggunakan matlab, contoh coding pengolahan citra digital, contoh pengolahan citra digital sederhana menggunakan matlab, contoh program matlab sederhana, euclidean distance, jarak euclidean distance matlab, medical image processing matlab, mengukur jarak antara dua objek dalam citra, pengolahan citra dicom, pengolahan citra medis, pengolahan citra medis menggunakan matlab, resolusi spasial citra, source code jarak citra matlab, thresholding citra menggunakan matlab. Bookmark the permalink. 53 Comments.
Kanda, untuk mendapatkan citra phantom berformat dicom ??
Bagaimana kanda ?
Hasil akuisisi citra dg modalitas pesawat radiodiagnostik seperti CT-Scan, CR, MRI, USG, dll umumnya berformat dicom
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
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
ya mas.,.,.,.
terima kasih banget………
sangat membatu banget masukan e jnengan .,.,.,.
sama sama mas agung
semoga sukses penelitiannya
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)
untuk penenmpatan coding diatas dimna mz soalnya sya coba eroor
Itu bukan koding melainkan persamaan
jika ditera0kan di coding gmna mz…mohon masukannya mz…..
[~,num] = bwlabel(BW,8);
kodingan tersebut menggunakan bwlabel untuk memberi label objek pada citra. yang saya tanyakan untuk apa angka 8 itu??
terima kasih
8 merupakan connected labelling component dengan 8 arah mata angin
4 merupakan connected labelling component dengan 4 arah mata angin
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?
waalaikumsalam
matlab versi a umumnya rilis di bulan maret
matlab versi a umumnya rilis di bulan september
bisa dicoba diterapkan
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
boleh minta file gambar slice1.dcm .. terima kasih
mas mau taya kenapa res = 1.4798; ???
Resolusi tsb diperoleh dari modalitas pesawat radiodiagnostik yg digunakan
mas saya mau tanya, untuk mendapatkan titik-titik itu jika di terapkan pada wajah gimana cara filternya ya mas, dan pakai metode apa?
Bisa menggunakan algoritma viola jones
Assalamu’alaikum
mas maaf mau tanya, kalau untuk mengukur resolusi spasial dengan metode LSF dan ESF pakai Matlab bagaimana yaa mas ?
Waalaikumsalam
semoga ke depan terdapat materi mengenai pengukuran resolusi spasial dengan metode LSF dan ESF
bang,
kalau metode JST untuk deteksi penyakit tanaman apa bg?
Bisa menggunakan jst backpropagation
Kak maaf mau tanya lagi..
Perbedaan curve fitting dan curve fitting Toolbox apa yaa? Atau sama saja?
Sama saja nisau farhatin
Ok, Makasih Kak…
Sama sama nisau farhatin
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)))
Iya sdh betul
baik Kak terimakasih… Maaf yaaa kak banyak tanya…
sama sama nisau farhatin
kak mau tanya,
misalkan nih saya pakai di telapak kaki,
nah cara menentukan titik titik yang akan dihitung dengan cara apa ya kak ?
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
Pada prinsipnya sama saja
Menghitung jarak bisa dilakukan menggunakan persamaan euclidean
bg mau tanya format citra saya bmp, bagaimana cara merubahnya ke dicom atau dcmnya bg? mohon solusinya bg. terima kasih
kak, maaf mau nanya kalau dijadikan perulangan karena jumlah objeknya banyak bagaimana kak? terus dibagi dengan banyaknya jarak
Perulangan bisa dilakukan menggunakan for dan while
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?
Source code di atas sudah sesuai urutan
Mas mau tanya, kalau mengukur panjang dan lebar pada siluet bisa menggunakan metode ini ga?, Apa bisa digunakan untuk memploting bagian tubuh
Bisa dicoba diimplementasikan
Mas mau tanya, kalau mengukur panjang dan lebar pada siluet bisa menggunakan metode ini ga?, Apa bisa digunakan untuk memploting bagian tubuh
assalamualaikum, mas mau tanya kalau membentuk telapak kaki agar bisa ditampilkan itu bagaimana ya mas?
Waalaikumsalam
Bisa mencoba metode thresholding
Bagaimana cara menghitung diameter horizontal kanker dalam citra?
Mohon responnya bg
Bisa menggunakan fitur major axis length
kalau mengukur 3D bisa ga bang?.
bisa saja tinggal menambahkan sumbu z