# 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 = 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("")