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 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 du 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

Source Code dan Citra dicom pada pemrograman di atas dapat diunduh melalui laman berikut ini: Source Code

Save

Save

Posted on October 22, 2015, in Pengolahan Citra and tagged , , , , , , , , , , , , , , , , , , , , , , , . Bookmark the permalink. 8 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 .,.,.,.

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 )

Twitter picture

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

Facebook photo

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

Google+ photo

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

Connecting to %s

%d bloggers like this: