This operator is simpler than Sobel's.
print 'Program Python Deteksi Tepi'Here, the result
print 'oleh Nugroho Adi Pramono'
'''Komentar diantara tiga-tanda petik tidak akan dibaca
oleh python'''
#komentar setelah tanda pagar juga tidak di baca oleh python
import Image #memanggil modul untuk olah gambar
import os,sys #memanggil modul untuk mengakses file
import numpy as np #memanggil modul untuk operasi maatematika matrik/array
gb = Image.open('../gambar.jpg') #memasukkan gambar ke variabel gb
print 'format awal: ' ,gb.format, "%dx%d" % gb.size, gb.mode
print 'konversi ke grayscale'
gbw = gb.convert("L")
gbw.save('gambarBW.jpg') #simpan hasil konversi ddg nama gambarBW.jpg
gbw = Image.open('gambarBW.jpg') #masukkan gambar grayscale hasil konversi ke variabel gbw
print 'format: ',gbw.format, "%dx%d" % gbw.size, gbw.mode
ukuran=gbw.size #mengambil nilai resolusi gambar
'''buat array r dan s berukuran sama dengan ukuran gambar'''
r=np.zeros((ukuran[0],ukuran[1]),dtype=np.integer)
s=np.zeros((ukuran[0],ukuran[1]),dtype=np.integer)
print 'Mengambil nilai piksel, masukkan ke array r'
for i in range (ukuran[0]):
for j in range (ukuran[1]):
r[i,j]=gbw.getpixel((i,j))
print 'Deteksi tepi menggunakan operator Robert'
gx=np.zeros((ukuran[0],ukuran[1]),dtype=np.integer)
gy=np.zeros((ukuran[0],ukuran[1]),dtype=np.integer)
g=np.zeros((ukuran[0],ukuran[1]),dtype=np.float)
for i in range (ukuran[0]-1):
for j in range (ukuran[1]-1):
gx[i,j]=r[i,j]-r[i+1,j+1]
gy[i,j]=r[i,j+1]-r[i+1,j]
g=np.sqrt(np.power(gx,2)+np.power(gy,2))
print 'Atur threshold'
for i in range (ukuran[0]-1):
for j in range (ukuran[1]-1):
if (g[i,j]<11):
s[i,j]=0
else:
s[i,j]=255
print 'update gambar'
for i in range (ukuran[0]):
for j in range (ukuran[1]):
gbw.putpixel((i,j),s[i,j]) #letakkan pixel yang telah dimodifikasi ke posisi i,j
print 'Menyimpan gambar'
gbw.save('gambarRobert.jpg') #simpan dengan nama gambarRobert.jpg
print 'Gambar tersimpan'
print 'Program Selesai'
Image source
From python |
Gray-scaled image
From python |
Edge-detected image
From python |