Anda di halaman 1dari 18

TUGAS

VISI KOMPUTER

Oleh :

DANIA DWI SAFITRI


G1A020030

Dosen Pengampu :

1. Arie Vatresia, S.T., M.T.I.,Ph.D.

2. Ferzha Putra Utama, S.T., M.Eng.

PROGRAM STUDI INFORMATIKA

FAKULTAS TEKNIK

UNIVERSITAS BENGKULU

2023
1. Simple rendering (30 points)
Obtain the file bunny.npy from the data folder of this assignment and load it into Python. There
is a single variable in this file; the variable N is an h × w × 3 array of surface normals. N(i,j,1),
N(i,j,2), and N(i,j,3) are the x, y, and z components of the surface normal at the ijth surface point,
as observed by an orthographic camera with view direction (0, 0, 1).
1. Compute and display the radiance emitted from each point assuming Lambertian re-
flectance and constant albedo (equal to one), with a distant point light source in direction l
= (0, 0, 1). How is the final image related to the surface normals?
2. Compute and display the emitted radiance for three different light source directions which
are rotated i) 45◦ up, ii) 45◦ right, and iii) 75◦ right from the frontal direction l = (0, 0, 1).
Assume uniform unit albedo once again, for all cases.Can you spot errors in the field of
surface normals? What are the illumination effects being ignored in this calculation of
scene radiance?
Jawab :

Penjelasan Source Code:


Kode tersebut digunakan untuk melakukan pemodelan dan visualisasi permukaan 3D
dengan memanfaatkan metode Lambertian. Pertama, data normal permukaan 3D dimuat dari file
"bunny.npy" dan disimpan dalam variabel normal_data. Setelah itu, sebuah vektor arah
pencahayaan ditentukan dengan light_direction yang menunjukkan cahaya datang dari arah
sumbu z positif. Model pemantulan Lambertian diadopsi dengan asumsi albedo (reflektivitas
permukaan) konstan sebesar 1.0. Radiansi Lambertian dihitung untuk setiap titik permukaan
dengan melakukan produk dot antara vektor normal permukaan dan vektor arah pencahayaan,
kemudian hasilnya dikalikan dengan albedo.
Visualisasi dilakukan dengan menggunakan Matplotlib. Sebuah gambar (figure) dibuat
dengan dua subplot. Subplot pertama, dengan proyeksi 3D, menampilkan plot permukaan 3D
dari data normal asli. Subplot kedua adalah plot 2D yang menunjukkan hasil radiansi Lambertian
yang dihitung dengan menggunakan warna untuk merepresentasikan intensitas radiansi. Fungsi
plt.colorbar() menambahkan skala warna ke subplot kedua untuk memudahkan interpretasi.
Keseluruhan visualisasi memberikan pemahaman tentang bagaimana pemantulan Lambertian
menghasilkan representasi visual pada permukaan 3D berdasarkan data normal yang diamati.
Output :
Penjelasan Source Code :
Kode diatas bertujuan untuk mengilustrasikan proses rendering permukaan 3D dengan
variasi arah pencahayaan menggunakan model reflektansi Lambertian. Dalam tahap awal,
pustaka NumPy diimpor dengan alias `np` untuk operasi numerik, Matplotlib digunakan sebagai
alat untuk plotting, dan modul `Axes3D` dari `mpl_toolkits.mplot3d` diperlukan agar dapat
melakukan plotting dalam tiga dimensi.
Selanjutnya, data normal permukaan dimuat dari file biner NumPy yang terletak pada
path tertentu. Normal permukaan adalah vektor yang menunjukkan arah tegak lurus terhadap
permukaan pada setiap titiknya. Arah pencahayaan diatur sebagai array vektor 3D, mewakili
berbagai orientasi cahaya yang akan diterapkan pada permukaan. Albedo, yang merupakan
konstanta untuk model reflektansi Lambertian, ditetapkan pada nilai 1.0, menunjukkan bahwa
permukaan sepenuhnya menggantikan cahaya yang diterimanya.
Setelahnya, dilakukan perhitungan radiansi Lambertian untuk setiap arah pencahayaan.
Radiansi Lambertian adalah hasil dari perhitungan dot product antara normal permukaan dan
vektor arah pencahayaan. Hasil perhitungan ini merepresentasikan intensitas cahaya yang
dipantulkan oleh permukaan dalam berbagai arah.
Untuk presentasi visual, plot disusun dalam bentuk subplot dengan satu baris dan jumlah
kolom sesuai dengan jumlah arah pencahayaan yang dirotasi, ditambah satu subplot untuk
menampilkan permukaan 3D asli. Subplot pertama didedikasikan untuk menampilkan plot
permukaan 3D asli dengan visualisasi normal permukaan. Subplot-subplot berikutnya
menampilkan plot radiansi yang dihasilkan untuk setiap arah pencahayaan, memberikan
pemahaman yang lebih baik tentang bagaimana intensitas cahaya bervariasi pada permukaan.
Terakhir, perintah `plt.show()` digunakan untuk menampilkan seluruh plot secara
keseluruhan. Ini memberikan visualisasi komprehensif terhadap permukaan di bawah berbagai
kondisi pencahayaan, memfasilitasi pemahaman terhadap perubahan intensitas cahaya dan
pencahayaan pada objek 3D tersebut.
Output :

2. Lambertian photometric stereo


Jawab :

Langkah pertama adalah mengimport library yang dibutuhkan. Terdapat beberapa library
yang digunakan, diantaranya adalah 'os' yang berfungsi untuk berinteraksi dengan sistem operasi,
memungkinkan pengelolaan jalur file dan direktori. 'zipfile' digunakan untuk menangani file ZIP,
termasuk dalam konteks mengekstrak isi dari file tersebut. Meskipun tidak digunakan secara
eksplisit dalam bagian kode yang ditampilkan, 'matplotlib.pyplot as plt' umumnya digunakan
untuk membuat plot atau visualisasi data. Terakhir, 'numpy as np' digunakan untuk operasi
numerik, memproses data gambar, dan menyediakan array serta fungsi matematika efisien untuk
manipulasi dan analisis data numerik
Kemudian, mendefinisikan Path Directory yaitu enentukan jalur ke file ZIP yang akan
diekstrak dan direktori tempat isi file ZIP akan diekstrak.

Lalu, mengekstrak konten dari file ZIP ke dalam direktori yang telah ditetapkan. Proses
ini melibatkan penggunaan fungsi ZipFile untuk membuka file ZIP, diikuti dengan penggunaan
extractall untuk mengekstrak semua file yang terdapat dalam arsip tersebut ke direktori yang
telah ditentukan sebelumnya.

Terdapat subdirektori di dalam direktori hasil ekstraksi dan menyimpannya dalam


variabel subdirectory.

Selanjutnya, memuat gambar dari file TIF di dalam subdirektori dan menyimpannya
dalam bentuk daftar. Juga memuat file numpy (.npy) dan menyimpannya dalam variabel
light_sources.

Kemudian, menggabungkan gambar dalam matriks I. Membuat array NumPy 3D dengan


menggabungkan gambar-grayscale sepanjang sumbu terakhir. Array yang dihasilkan memiliki
dimensi (tinggi, lebar, jumlah_gambar).

Lalu, mengubah bentuk I menjadi array 2D. Mengubah bentuk dengan mengonversi array
3D I menjadi array 2D I_reshaped di mana setiap baris sesuai dengan piksel di semua gambar,
dan setiap kolom sesuai dengan gambar yang berbeda.
Membuat matriks L yang merepresentasikan sumber cahaya dari file biner NumPy. Kode
ini mengasumsikan bahwa matriks L memiliki bentuk (7, 3), yang berarti terdapat tujuh sumber
cahaya dan tiga komponen untuk setiap sumber tersebut.

Menyusun solusi untuk sistem persamaan linear guna memperkirakan matriks pseudo-
normal. Dalam kode diatas, metode kuadrat terkecil np.linalg.lstsq digunakan untuk
menyelesaikan sistem persamaan linear, dan sebagai hasilnya, matriks pseudo-normal B
diperkirakan. Adapun transposisi dari matriks L digunakan untuk memastikan kesesuaian dengan
dimensi matriks input yang dibutuhkan oleh metode tersebut. Lalu, normalisasi matriks pseudo-
normal ( B ) untuk mendapatkan albedo dan normal.

Albedo A dihitung dengan mengambil norma sepanjang sumbu pertama dari B, dan
matriks normal N diperoleh dengan membagi setiap kolom B dengan elemen yang sesuai di
A.Kemudian, menampilkan albedo dan nilai normal yang dipulihkan
Kode pada gambar diatas digunakan untuk memvisualisasikan hasil pemulihan albedo
dan nilai normal dengan menggunakan pustaka Matplotlib. Subplot pertama menampilkan
gambar albedo, sementara subplot kedua menampilkan nilai normal yang telah dipulihkan.Lalu,
memprediksi penampilan di bawah arah cahaya baru.

Pada kode tersebut terdapat proses prediksi penampilan wajah di bawah arah cahaya
baru. Arah cahaya baru didefinisikan dalam array new_light_directions, dan matriks albedo A
diubah bentuknya untuk memastikan dimensi yang sesuai dalam perhitungan selanjutnya.
Dilakukan perhitungan dot product antara matriks albedo A dan matriks normal N untuk arah
cahaya baru, hasilnya disimpan dalam matriks new_B, yang kemudian diubah bentuk untuk
memenuhi dimensi yang sesuai. Proses berikutnya melibatkan perhitungan ulang gambar wajah
menggunakan matriks new_B dan matriks pencahayaan asli L, dan hasilnya disimpan dalam
new_I_flat. Langkah terakhir adalah mengubah kembali bentuk new_I_flat untuk cocok dengan
bentuk gambar asli dan menampilkan gambar wajah yang dihasilkan kembali. Tahap ini
memberikan detail yang mendalam tentang mekanisme prediksi penampilan wajah di bawah arah
cahaya baru.
Pada bagian lainnya, fokus kode berpindah ke pemulihan permukaan objek dengan
menggunakan integrasi normal. Fungsi utama yang terlibat dalam proses ini adalah
integrate_frankot dan integrate_1d. Selanjutnya, hasil dari pemulihan permukaan ditampilkan
visual dengan menggunakan matriks kedalaman (Z) yang dihasilkan dari fungsi integrasi normal
sebelumnya.
Integrate_frankot adalah fungsi yang menerima turunan kedua dari komponen normal
terhadap koordinat x (fx) dan y (fy). Dalam prosesnya, komponen z normal (N[2]) dinormalisasi
untuk memastikan stabilitas dalam perhitungan. Setelah normalisasi, turunan kedua ini
digunakan untuk menghitung turunan kedua parsial, yakni fxx, fyy, dan fxy.

Integrate_1d merupakan komponen integral dari proses integrasi normal yang digunakan
untuk menghitung integral satu dimensi dengan menerapkan metode jumlah kumulatif. Integrasi
ini diaplikasikan pada turunan kedua yang telah dihitung sebelumnya. Hasil dari integrasi ini
menghasilkan nilai Zxx, Zyy, dan Zxy. Setelah itu, nilai-nilai ini digunakan untuk menghitung
matriks kedalaman (Z) yang merepresentasikan bentuk permukaan objek. Langkah berikutnya,
melibatkan tampilan dari permukaan yang telah dipulihkan. Pada tahap ini, permukaan objek
dipulihkan dan secara visual ditampilkan dengan menggunakan matriks kedalaman (Z) yang
dihasilkan dari fungsi integrasi normal sebelumnya.
Dalam bagian kode ini, nilai Z dihasilkan dengan memanggil fungsi integrate_frankot
pada komponen normal N[0] dan N[1]. Fungsi tersebut memanfaatkan integrasi normal untuk
menghasilkan matriks kedalaman yang mencerminkan struktur permukaan objek. Matriks
kedalaman Z kemudian diubah bentuk agar sesuai dengan format gambar asli menggunakan
fungsi reshape. Tahapan terakhir melibatkan visualisasi gambar permukaan yang telah dipulihkan
dengan menggunakan Matplotlib. Konfigurasi tampilan ini mencakup penyesuaian ukuran
gambar (figsize), pemilihan peta warna (cmap), serta memberikan judul (title) pada tampilan
hasilnya.
Output :

Penjelasan Output :
Gambar pertama dalam rangkaian tersebut adalah representasi visual dari reflektansi
permukaan objek, di mana setiap piksel mencerminkan sejauh mana setiap bagian dari objek
memantulkan cahaya. Gambar kedua, yang disebut sebagai "Recovered Normals,"
menggambarkan orientasi normal permukaan objek pada setiap piksel, dengan warna-warna
mencerminkan arah dan sudut kemiringan dari permukaan objek tersebut. Informasi mengenai
Recovered Normals ini bermanfaat untuk menentukan cara cahaya memantul dari permukaan
objek. Gambar ketiga, yang diberi judul "Re-rendered Face Images," memperkirakan penampilan
objek di bawah arah cahaya yang baru. Proses re-rendering ini memberikan gambaran tentang
bagaimana objek akan terlihat ketika terpapar cahaya dari sudut yang berbeda, yang secara
efektif membantu dalam memprediksi penampilan objek di bawah kondisi pencahayaan yang
berubah. Terakhir, gambar keempat adalah hasil akhir dari rekonstruksi permukaan objek,
menciptakan visualisasi tiga dimensi dari objek yang dipulihkan berdasarkan informasi normal
dan cahaya yang telah diolah sebelumnya.

3. Non-Lambertian photometric stereo


Jawab :
Berikut merupakan implementasi dari beberapa teknik dalam grafika komputer, yaitu
untuk merender objek 3D menggunakan model penerangan Blinn-Phong dan teknik fotometri
stereo Lambertian.
Yang pertama, memuat Data dengan File ‘bunny.py’. Kode ini membaca file numpy
(bunny.npy) yang berisi data objek 3D (dalam hal ini, kelinci). Data tersebut disimpan dalam
variabel N.

Lalu, mengatur Konstanta dan Matriks. Kode ini mendefinisikan beberapa konstanta dan
matriks untuk pengaturan render, seperti dimensi citra (h dan w), vektor pandang (v), dan
beberapa arah cahaya (l, l_up, l_right, l_75_right), serta albedo objek (albedo).

Kemudian, implementasi Fungsi Blinn-Phong yang digunakan untuk untuk menghitung


reflektansi Blinn-Phong berdasarkan normal permukaan, arah cahaya, arah pandang, koefisien
difusi (kd), koefisien spekular (ks), dan eksponen spekular (alpha).
Fungsi pada gambar diatas digunakan untuk merender objek dengan model penerangan
Blinn-Phong. Hasilnya disimpan dalam matriks radiance. Kemudian, terdapat Fungsi Placeholder
yang digunakan untuk teknik fotometri stereo Lambertian. Fungsi ini mengembalikan peta
albedo konstan dan matriks normal yang semu.

Lalu, terdapat Fungsi Placeholder Untuk Integrasi Permukaan Frankot-Chellappa. Ini


adalah fungsi placeholder untuk integrasi permukaan menggunakan algoritma Frankot-
Chellappa. Fungsi ini mengembalikan matriks permukaan yang masih kosong.

Yang terakhir adalah Fungsi Untuk Menampilkan Hasil Render. Fungsi ini digunakan
untuk menampilkan hasil render dalam subplot matplotlib.
Bagian 1
Source Code :

Penjelasan Source Code :


Pada tahap inisialisasi, variabel-variabel kd, ks, dan alpha didefinisikan untuk digunakan
dalam proses rendering. Nilai koefisien difusi (kd) diatur pada 0.8, koefisien spekular (ks) diatur
pada 0.2, dan eksponen spekular (alpha) diatur pada 10. Langkah selanjutnya melibatkan proses
merender gambar dengan berbagai arah cahaya. Fungsi render_bunny_blinn_phong digunakan
untuk menghasilkan radiance, yang merupakan nilai intensitas cahaya yang diterima oleh objek,
untuk setiap arah cahaya yang berbeda. Setiap kali fungsi ini dipanggil, sebuah gambar
dihasilkan dengan cahaya datang dari arah yang berbeda. Untuk memvisualisasikan hasil render
dari berbagai arah cahaya secara sejajar, dilakukan pembuatan subplot. Setiap subplot
menampilkan gambar yang dihasilkan oleh fungsi render_bunny_blinn_phong untuk arah cahaya
tertentu. Setiap gambar dilengkapi dengan judul yang memberikan informasi tentang arah cahaya
yang digunakan dalam proses rendering tersebut.
Output :

Implementasi ini menggunakan model Blinn-Phong untuk menghitung refleksi cahaya


pada objek 3D, berdasarkan koefisien difusi, koefisien spekular, dan eksponen spekular.
Penerangan dari empat arah cahaya yang berbeda diaplikasikan pada objek, yaitu frontal, 45
derajat ke atas, 45 derajat ke kanan, dan 75 derajat ke kanan, menggunakan model Blinn-Phong.
Hasil render dari berbagai arah cahaya ditampilkan dalam satu tampilan subplot, memungkinkan
visualisasi yang komprehensif. Selain itu, parameter seperti koefisien difusi (kd), koefisien
spekular (ks), dan eksponen spekular (alpha) dapat dikendalikan, memberikan fleksibilitas untuk
mengamati perubahan dalam hasil render. Keseluruhan implementasi ini memberikan gambaran
tentang penerapan model penerangan Blinn-Phong dalam merender objek 3D dari berbagai arah
cahaya, sambil memfasilitasi eksperimen terhadap parameter untuk memahami efeknya terhadap
hasil akhir.
Bagian 2
Source Code :
Penjelasan :
a. Dalam tahap inisialisasi, variabel-variabel penting diatur, yaitu kd sebagai koefisien difusi
dengan nilai 0.3, ks sebagai koefisien spekular dengan nilai 0.5, dan alpha sebagai eksponen
spekular dengan nilai 10.
b. Untuk menguji model Blinn-Phong dengan parameter baru, variabel l1, l2, dan l3 digunakan
untuk menentukan tiga arah cahaya yang berbeda.
c. Selanjutnya, dilakukan proses rendering gambar untuk setiap arah sumber cahaya yang
berbeda dengan menggunakan model Blinn-Phong. Hal ini menghasilkan gambar render untuk
objek dengan parameter yang baru disesuaikan untuk setiap arah sumber cahaya.
d. Hasil render dari masing-masing arah sumber cahaya ditampilkan secara sejajar dalam
subplot.
e. Proses fotometri stereo dan integrasi permukaan dilakukan terhadap masing-masing gambar
hasil render dari arah sumber cahaya yang berbeda. Ini melibatkan analisis lebih lanjut terhadap
informasi intensitas cahaya yang diterima oleh objek dari sudut pandang yang berbeda-beda,
serta rekonstruksi permukaan objek tersebut.
Output :
Dalam eksplorasi ini, digunakan parameter Blinn-Phong yang baru (kd_2, ks_2, alpha_2)
untuk mengamati dampaknya terhadap hasil render objek. Penggunaan parameter yang berbeda
ini memberikan pemahaman tentang bagaimana variasi nilai koefisien difusi, koefisien spekular,
dan eksponen spekular memengaruhi representasi visual objek. Selanjutnya, dilakukan penetapan
tiga arah sumber cahaya yang berbeda, yaitu l1, l2, dan l3, untuk mengamati perbedaan dalam
hasil render objek 3D dari sudut pandang yang berbeda. Setelah merender objek untuk setiap
arah sumber cahaya, dilakukan proses fotometri stereo dan integrasi permukaan, menghasilkan
peta albedo dan model permukaan objek yang memberikan informasi mengenai distribusi
intensitas cahaya dan bentuk fisik objek. Langkah terakhir adalah melakukan pengamatan
perbedaan hasil render, peta albedo, dan model permukaan untuk ketiga arah sumber cahaya
yang berbeda. Melalui perbandingan ini, pengamat dapat menarik kesimpulan mengenai
bagaimana perubahan parameter dan arah cahaya secara konkret memengaruhi representasi
visual dan geometri objek. Implementasi ini memberikan pemahaman mendalam tentang
hubungan antara parameter Blinn-Phong, arah sumber cahaya, dan hasil render objek.
Bagian 3
Source Code :
Penjelasan :
Langkah pertama, dilakukan penyesuaian parameter Blinn-Phong dengan mengatur nilai
koefisien difusi maksimal (kd_3 = 1.0), koefisien spekular nol (ks_3 = 0.0), dan eksponen
spekular satu (alpha_3 = 1). Variabel radiance_l1_3, radiance_l2_3, dan radiance_l3_3 kemudian
digunakan untuk merender gambar objek untuk setiap arah sumber cahaya dengan menggunakan
parameter Blinn-Phong yang baru. Hasil render dari masing-masing arah sumber cahaya
ditampilkan dalam bentuk subplot, memungkinkan visualisasi yang komprehensif terhadap
perubahan parameter. Selanjutnya, dilakukan proses fotometri stereo dan integrasi permukaan
untuk masing-masing gambar hasil render dari arah sumber cahaya yang berbeda, yang
melibatkan analisis intensitas cahaya yang diterima oleh objek dari berbagai sudut pandang dan
rekonstruksi permukaan objek. Keseluruhan implementasi ini memberikan pemahaman
mendalam tentang pengaruh parameter Blinn-Phong baru terhadap hasil render objek dari
berbagai arah sumber cahaya, sambil memfasilitasi analisis geometris objek melalui proses
fotometri stereo dan integrasi permukaan.

Output :
Melalui langkah-langkah tertentu, implementasi ini menggunakan parameter Blinn-Phong
yang baru dengan nilai koefisien difusi maksimal (kd_3 = 1.0), koefisien spekular nol (ks_3 =
0.0), dan eksponen spekular satu (alpha_3 = 1). Langkah berikutnya adalah melakukan rendering
gambar objek untuk berbagai arah sumber cahaya, dengan tujuan untuk mengamati dampak dari
parameter Blinn-Phong yang baru terhadap hasil render. Selanjutnya, proses fotometri stereo dan
integrasi permukaan diterapkan untuk menganalisis hasil render dari arah sumber cahaya yang
berbeda, menghasilkan peta albedo dan model permukaan objek. Dengan demikian, penggunaan
parameter Blinn-Phong yang baru memungkinkan pengamat untuk mengamati secara langsung
bagaimana perubahan nilai koefisien difusi, koefisien spekular, dan eksponen spekular
memengaruhi representasi visual dan geometri objek. Keseluruhan implementasi ini memberikan
wawasan mendalam tentang peran parameter Blinn-Phong dalam merender objek 3D dan
bagaimana setiap pengaturan dapat mempengaruhi hasil visual dan informasi geometris yang
dihasilkan.

Anda mungkin juga menyukai