Team Teaching
Team Teaching
TEAM TEACHING
DILAPORKAN OLEH :
UNIVERSITAS GUNADARMA
2021
Daftar isi
Pengenalan Image Processing dengan Python...................................................................................3
Mambaca dan menampilkan gambar.................................................................................................3
Tugas 1: Baca gambar dari URL dan tampilkan............................................................................5
Kontur Gambar dan Histogram..........................................................................................................5
Histogram citra berwarna dan citra grayscale................................................................................5
Plot histogram gambar abu-abu.....................................................................................................7
Tugas 2: Tampilkan gambar anda dalam grayscale dan buat histogramnya...................................8
Temukan kontur gambar dari gambar grayscale................................................................................9
Metode 1: Gunakan matplotlib. contour........................................................................................9
Metode 2: Gunakan library openCV..............................................................................................9
Tugas 3: Temukan kontur gambar Anda sendiri..........................................................................10
Transformasi Grayscale dan Persamaan Histogram.........................................................................11
Grayscale Transformation............................................................................................................11
Tugas 4: Cobalah beberapa operasi matematika pada gambar Anda............................................13
Histogram Equalization...................................................................................................................13
Tugas 5: Lakukan pemerataan histogram pada gambar grayscale Anda......................................15
Transformasi Fourier dari Gambar Abu-abu....................................................................................16
Menemukan Tepi dengan Highpass Filtering di FFT.......................................................................17
Image Recognition.............................................................................................................................18
Import library yang dibutuhkan.......................................................................................................18
Melakukan proses training terhadap dataset....................................................................................22
Mengevaluasi hasil prediksi.............................................................................................................26
Menampilkan Salah Satu Hasil Prediksi Yang salah............................................................26
Menampilkan Hasil Prediksi Keseluruhan Dari Algoritma yang Dibangun.........................26
Pengenalan Image Processing dengan Python
Import module yang diperlukan
• Numpy adalah library untuk manipulasi array, digunakan untuk aljabar linier,
transformasi Fourier, dan kemampuan bilangan acak.
• Pandas adalah library untuk manipulasi data dan analisis data.
• CV2 adalah library untuk tugas-tugas computer vision.
• Skimage adalah library yang mendukung aplikasi pengolah gambar pada python.
• Matplotlib adalah library yang menghasilkan gambar dan menyediakan toolkit antarmuka
pengguna grafis.
input_path="/content/image-1.jpeg"
input_path="/content/image-2.jpeg"
input_path="/content/image-3.jpeg"
def cv_imshow(img):
plt.figure(figsize = (15,15))
plt.imshow(img)
plt.xticks([]), plt.yticks([])
plt.show()
input_path="/content/image-1.jpeg"
input_path="/content/image-2.jpeg"
input_path="/content/image-3.jpeg"
urls = ["image-1.jpeg",
"image-2.jpeg",
"image-3.jpeg"
]
def cv_imshow(img):
plt.figure(figsize = (15,15))
plt.imshow(img)
plt.xticks([]), plt.yticks([])
plt.show()
loop terhadap URL gambar
url =
https://www.google.com/url?sa=i&url=https%3A%2F%2Ffanyv88.com%3A443%2Fhttps%2Fkhyzylsaleem.ar
tstation.com%2F&psig=AOvVaw3xZfG9fHJgJHmwocQfuLOo&ust=16198545891
11000&source=images&cd=vfe&ved=0CAoQjRxqFwoTCLCF7Oa6pfACFQAAAAAdA
AAAABAD
myImg = io.imread(url)
cv_imshow(cv.cvtColor(myImg, cv.COLOR_BGR2RGB))
image = io.imread(urls[0])
color = ('b','g','r')
for i,col in enumerate(color):
histr = cv.calcHist([image],[i],None,[256],[0,256])
plt.plot(histr,color = col)
plt.xlim([0,256])
plt.show()
Grayscale Transformation
Bagian ini memberikan beberapa contoh melakukan transformasi matematis dari gambar
grayscale
Transformasi gambar lainnya, setelah menambahkan konstanta, semua piksel menjadi lebih cerah
dan efek gambar seperti perpeloncoan dihasilkan
im3 = (100.0/255)*gray_image + 100
cv_imshow(im3)
Tingkat kecerahan gambar abu-abu berkurang setelah langkah ini
im4 = 255.0*(gray_image/255.0)**2
cv_imshow(im4)
Tugas 4: Cobalah beberapa operasi matematika pada gambar Anda
Histogram Equalization
Bagian ini mendemonstrasikan pemerataan histogram pada gambar gelap. Transformasi ini
meratakan histogram tingkat abu-abu sehingga semua intensitas menjadi seumum mungkin. Fungsi
transformasi adalah fungsi distribusi kumulatif (cdf) dari nilai piksel pada citra (dinormalisasi untuk
memetakan rentang nilai piksel ke rentang yang diinginkan). Contoh ini menggunakan gambar 4 (im4).
grayIMG1 = histeq(myGrayImgTrans)
cv_imshow(grayIMG1)
sesudah
f = np.fft.fft2(imBlur)
fshift = np.fft.fftshift(f)
magnitude_spectrum = 30*np.log(np.abs(fshift))
plt.figure(figsize=([20, 20]))
plt.subplot(131),plt.imshow(imBlur, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(132),plt.imshow(img_back, cmap = 'gray')
plt.title('Gambar setelah HPF'), plt.xticks([]), plt.yticks([])
plt.subplot(133),plt.imshow(img_back)
plt.title('Hasil dalam JET'), plt.xticks([]), plt.yticks([])
plt.show()
Image Recognition
Pada praktikum ini, algoritma yang akan dibangun adalah untuk melakukan pengenalan obyek pada
sebuah gambar. Pada praktikum ini menggunakan library tensorflow.
Dalam melakukan proses pengenalan image, diperlukan fitur-fitur yang telah dipelajari pada notebook
sebelumnya seperti histogram, pengenalan edge, dan sebagainya
Adapun langkah langkah adalah sebagai berikut
import cupy as cp
import time
import numpy as np
cp.cuda.Device(0).use()
for i in range (0,1):
N = 1024
start = time.time()
A = cp.random.randint(-5,5,(N,N))
B = cp.random.randint(-5,5,(N,N))
Untuk mengukur waktu yang diperlukan untuk membuat indeks matriks dengan menggunakan library
cupy yang menggunakan GPU untuk komputasi
C = cp.matmul(A,B)
cp.cuda.Stream.null.synchronize()
print("Waktu yang diperlukan utk mengalikan 2 matirk berukuran %d,d
proses ke %d dengan GPU = %.2f"%(N,N,i,time.time()-start))
start = time.time()
A1 = cp.asnumpy(A)
B1 = cp.asnumpy(B)
Untuk mengukur waktu yang diperlukan untuk membuat indeks matriks dengan menggunakan library
NumPy yang menggunakan CPU untuk komputasi
C = np.matmul(A1,B1)
print("Waktu yang diperlukan utk mengalikan matirk berukuran %d,%d
proses ke %d dengan CPU = %.2f"%(N,N,i,time.time()-start))
output :
import tensorflow as tf
import time
N = 1024
A = np.random.randint(-5,5,(N,N))
B = np.random.randint(-5,5,(N,N))
start = time.time()
with tf.compat.v1.device('/device:CPU:0'):
C = tf.matmul(A,B)
print("Waktu matmul dengan Tensorflow = %.2f"%(time.time()-start))
output :
WARNING:tensorflow:Deprecation warnings have been disabled. Set
TF_ENABLE_DEPRECATION_WARNINGS=1 to re-enable them.
Waktu matmul dengan Tensorflow = 0.02
# mlp for binary classification
from pandas import read_csv
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
import numpy as np
# load dataset
path = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/ion
osphere.csv'
df = read_csv(path, header=None)
# membagi kedalam kolom input dan output
X, y = df.values[:, :-1], df.values[:, -1]
# set tipe data menjadi float
X = X.astype('float32')
# membuat encode label
y = LabelEncoder().fit_transform(y)
# membagi kedalam dataset train dan test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3
3)
print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)
# determine the number of input features
n_features = X_train.shape[1]
untuk membuat model Neural Network dengan 3 layer
model = Sequential()
model.add(Dense(10, activation='relu', kernel_initializer='he_normal',
input_shape=(n_features,)))
model.add(Dense(8, activation='relu', kernel_initializer='he_normal'))
model.add(Dense(1, activation='sigmoid'))
# compile model
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['a
ccuracy'])
# fit model
model.fit(X_train, y_train, epochs=150, batch_size=32, verbose=0)
# evaluasi model
loss, acc = model.evaluate(X_test, y_test, verbose=0)
print('Akurasi Data Tes: %.3f' % acc)
# make a prediction
row = np.random.random_sample((1,34))
row = np.array(row)
yhat = model.predict(row)
print('Hasil Prediksi: %.3f' % yhat)
output :
# TensorFlow and tf.keras
import tensorflow as tf
# Helper libraries
import numpy as np
import matplotlib.pyplot as plt
fashion_mnist = tf.keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnis
t.load_data()
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
plt.figure()
plt.imshow(train_images[0])
plt.colorbar()
plt.grid(False)
plt.show()
train_images = train_images / 255.0
test_images = test_images / 255.0
plt.figure(figsize=(10,10))
for i in range(25):
plt.subplot(5,5,i+1)
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(train_images[i], cmap=plt.cm.binary)
plt.xlabel(class_names[train_labels[i]])
plt.show()
Melakukan proses training terhadap dataset
Bahan dataset untuk proses training model
train_images = train_images / 255.0
test_images = test_images / 255.0
plt.figure(figsize=(10,10))
for i in range(25):
plt.subplot(5,5,i+1)
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(train_images[i], cmap=plt.cm.binary)
plt.xlabel(class_names[train_labels[i]])
plt.show()
Untuk membuat model
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(10)
])
Untuk meng-compile Model
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_l
ogits=True),
metrics=['accuracy'])
untuk melatih Model
model.fit(train_images, train_labels, epochs=10)
untuk menguji model
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose
=2)
print('\nTest accuracy:', test_acc)
probability_model = tf.keras.Sequential([model,
tf.keras.layers.Softmax()])
predictions = probability_model.predict(test_images)
np.argmax(predictions[0])
def plot_image(i, predictions_array, true_label, img):
true_label, img = true_label[i], img[i]
plt.grid(False)
plt.xticks([])
plt.yticks([])
plt.imshow(img, cmap=plt.cm.binary)
predicted_label = np.argmax(predictions_array)
if predicted_label == true_label:
color = 'blue'
else:
color = 'red'
plt.xlabel("{} {:2.0f}% ({})".format(class_names[predicted_label],
100*np.max(predictions_array),
class_names[true_label]),
color=color)
def plot_value_array(i, predictions_array, true_label):
true_label = true_label[i]
plt.grid(False)
plt.xticks(range(10))
plt.yticks([])
thisplot = plt.bar(range(10), predictions_array, color="#777777")
plt.ylim([0, 1])
predicted_label = np.argmax(predictions_array)
thisplot[predicted_label].set_color('red')
thisplot[true_label].set_color('blue')
i = 0
plt.figure(figsize=(6,3))
plt.subplot(1,2,1)
plot_image(i, predictions[i], test_labels, test_images)
plt.subplot(1,2,2)
plot_value_array(i, predictions[i], test_labels)
plt.show()
output :
Train on 60000 samples
Epoch 1/10
60000/60000 [==============================] - 2s 34us/sample - loss:
0.4963 - acc: 0.8268
Epoch 2/10
60000/60000 [==============================] - 2s 33us/sample - loss:
0.3782 - acc: 0.8637
Epoch 3/10
60000/60000 [==============================] - 2s 33us/sample - loss:
0.3386 - acc: 0.8756
Epoch 4/10
60000/60000 [==============================] - 2s 33us/sample - loss:
0.3158 - acc: 0.8832
Epoch 5/10
60000/60000 [==============================] - 2s 33us/sample - loss:
0.2969 - acc: 0.8898
Epoch 6/10
60000/60000 [==============================] - 2s 33us/sample - loss:
0.2815 - acc: 0.8951
Epoch 7/10
60000/60000 [==============================] - 2s 33us/sample - loss:
0.2706 - acc: 0.8998
Epoch 8/10
60000/60000 [==============================] - 2s 33us/sample - loss:
0.2590 - acc: 0.9039
Epoch 9/10
60000/60000 [==============================] - 2s 33us/sample - loss:
0.2490 - acc: 0.9069
Epoch 10/10
60000/60000 [==============================] - 2s 33us/sample - loss:
0.2410 - acc: 0.9100
10000/10000 - 0s - loss: 0.3479 - acc: 0.8784
num_rows = 5
num_cols = 3
num_images = num_rows*num_cols
plt.figure(figsize=(2*2*num_cols, 2*num_rows))
for i in range(num_images):
plt.subplot(num_rows, 2*num_cols, 2*i+1)
plot_image(i, predictions[i], test_labels, test_images)
plt.subplot(num_rows, 2*num_cols, 2*i+2)
plot_value_array(i, predictions[i], test_labels)
plt.tight_layout()
plt.show()