Yang ke-2
unknown
python
2 years ago
4.1 kB
1
Indexable
Never
import numpy as np import matplotlib.pyplot as plt #=============================================================================== # LANGKAH 1 - SIAPKAN MODEL 3D YANG AKAN DIHITUNG VOLUMENYA #=============================================================================== panjang_ruang = 10 #km lebar_ruang = 10 #km tinggi_ruang = 10 #km #=============================================================================== # LANGKAH 2 - BACA MODEL 3D #=============================================================================== nama_file = "bukit.npy" # Nama file model 3D yang akan dihitung volumenya voxel = np.load(nama_file) voxel = voxel.astype(int) row, col, depth, thickness = voxel.shape # VISUALIZING CROSS CUT OF THE 3D MODEL n = row slice_1 = np.zeros(shape=(n, n, 3), dtype=np.uint8) # Template untuk potongan tiap slice slice_2 = np.zeros(shape=(n, n, 3), dtype=np.uint8) # Template untuk potongan tiap slice slice_3 = np.zeros(shape=(n, n, 3), dtype=np.uint8) for i in range(0, n): I = n - 1 - i for j in range(0, n): slice_1[I, j, :] = voxel[j, 399, i, :] # A Vertical cut with opposite z coordinate for i in range(0, n): I = n - 1 - i for j in range(0, n): slice_2[I, j, :] = voxel[200, j, i, :] # A Vertical with opposite z coordinate for i in range(0, n): for j in range(0, n): slice_3[i, j, :] = voxel[i, j, 200, :] # A horizontal cut plt.figure('A VERTICAL CROSS CUT OF THE 3D MODEL (1)', figsize=(3.5, 3.5)) plt.imshow(slice_1) plt.figure('A VERTICAL CROSS CUT OF THE 3D MODEL (2)', figsize=(3.5, 3.5)) plt.imshow(slice_2) plt.figure('A HORIZONTAL CROSS CUT OF THE 3D MODEL ', figsize=(3.5, 3.5)) plt.imshow(slice_3) #=============================================================================== # LANGKAH 3- AMBIL INFORMASI JUMLAH VOKSEL KESELURUHAN #=============================================================================== jumlah_semua_voksel = row * col * depth print("Jumlah semua voksel = ", jumlah_semua_voksel) plt.pause(1) #=============================================================================== # LANGKAH 4 - : TENTUKAN KRITERIA PENGENALAN OBJEK BERDASARKAN WARNA VOKSEL #=============================================================================== # Setelah menganalisis masalah programemr menentukan kondisi sbb ini # Periksa untuk suatu piksel, jika Green + Red + Blue > threshold # Maka voksel tersebut meruipakan elemen objek #=============================================================================== # LANGKAH 5 - : TENTUKAN UKURAN ELEMEN TERKECIL #=============================================================================== # Dengan pertimbangan bahwa sumber daya komputer memamadai, programmer # menentukan ukuran elemen terkecil adalah 1 voksel #=============================================================================== # LANGKAH 6 - : Lakukan scanning pada model sambil terapkan kriteria yang telah # dibuat untuk mengenali apakah voksel merupakan elemen dari objek. # HITUNG JUMLAH VOKSEL YANG MEMENUHI KRITERIA #=============================================================================== threshold = 20 n = 0 for i in range(0, row): for j in range(0, col): print("i, j = ", i, j, "Jumlah voksel elemen sementara = ", n, ".") for k in range(0, depth): cek = int(voxel[i, j, k, 0]) + int(voxel[i, j, k, 1]) + int(voxel[i, j, k, 2]) if cek > threshold: n = n + 1 print("") #=============================================================================== #=============================================================================== # LANGKAH 7 : HITUNG VOLUME OBJEK #=============================================================================== volume_ruangan = panjang_ruang * lebar_ruang * tinggi_ruang #km^3 volume_objek = (n/jumlah_semua_voksel) * volume_ruangan #km^3 print("========= HASIL KOMPUTASI INTEGRASI NUMERIK ==========") print("") print("Volume objek adalah", volume_objek, "km^3.") plt.show()