15
Nama : Febrika Adhi Kurniawan NIM : P31.2014.01653 Mata Kuliah : Image Processing Dosen : Hendro Subagyo, M.Eng 1. Dengan gambar moon, tampilkan image dengan beragam gamma : 2 gambar dg Gamma < 1 , 2 gambar dengan Gamma > import matplotlib import matplotlib.pyplot as plt import numpy as np from skimage import data, img_as_float from skimage import exposure matplotlib.rcParams['font.size'] = 8 def plot_img_and_hist(img, axes, bins=256): img = img_as_float(img) ax_img, ax_hist = axes ax_cdf = ax_hist.twinx() # Display image ax_img.imshow(img, cmap=plt.cm.gray) ax_img.set_axis_off() # Display histogram ax_hist.hist(img.ravel(), bins=bins, histtype='step', color='black') ax_hist.ticklabel_format(axis='y', style='scientific', scilimits=(0, 0)) ax_hist.set_xlabel('Pixel intensity') ax_hist.set_xlim(0, 1) ax_hist.set_yticks([]) # Display cumulative distribution img_cdf, bins = exposure.cumulative_distribution(img, bins)

Tugas Image Processing - Phyton

Embed Size (px)

DESCRIPTION

Enhanced Picture Histogram with python, tugas mata kuliah Image Processing

Citation preview

Page 1: Tugas Image Processing - Phyton

Nama : Febrika Adhi Kurniawan

NIM : P31.2014.01653

Mata Kuliah : Image Processing

Dosen :  Hendro Subagyo, M.Eng

1. Dengan gambar moon, tampilkan image dengan beragam gamma : 2 gambar dg Gamma < 1 , 2 gambar dengan Gamma >

import matplotlibimport matplotlib.pyplot as pltimport numpy as np

from skimage import data, img_as_floatfrom skimage import exposure

matplotlib.rcParams['font.size'] = 8

def plot_img_and_hist(img, axes, bins=256): img = img_as_float(img) ax_img, ax_hist = axes ax_cdf = ax_hist.twinx()

# Display image ax_img.imshow(img, cmap=plt.cm.gray) ax_img.set_axis_off()

# Display histogram ax_hist.hist(img.ravel(), bins=bins, histtype='step', color='black') ax_hist.ticklabel_format(axis='y', style='scientific', scilimits=(0, 0)) ax_hist.set_xlabel('Pixel intensity') ax_hist.set_xlim(0, 1) ax_hist.set_yticks([])

# Display cumulative distribution img_cdf, bins = exposure.cumulative_distribution(img, bins) ax_cdf.plot(bins, img_cdf, 'r') ax_cdf.set_yticks([])

return ax_img, ax_hist, ax_cdf

# Load an example imageimg = data.moon()

Page 2: Tugas Image Processing - Phyton

# Gammagamma_corrected = exposure.adjust_gamma(img, 2)

# Logarithmiclogarithmic_corrected = exposure.adjust_log(img, 1)

# Display resultsfig, axes = plt.subplots(nrows=2, ncols=3, figsize=(8, 5))

ax_img, ax_hist, ax_cdf = plot_img_and_hist(img, axes[:, 0])ax_img.set_title('Low contrast image')

y_min, y_max = ax_hist.get_ylim()ax_hist.set_ylabel('Number of pixels')ax_hist.set_yticks(np.linspace(0, y_max, 5))

ax_img, ax_hist, ax_cdf = plot_img_and_hist(gamma_corrected, axes[:, 1])ax_img.set_title('Gamma correction')

ax_img, ax_hist, ax_cdf = plot_img_and_hist(logarithmic_corrected, axes[:, 2])ax_img.set_title('Logarithmic correction')

ax_cdf.set_ylabel('Fraction of total intensity')ax_cdf.set_yticks(np.linspace(0, 1, 5))

# prevent overlap of y-axis labelsfig.subplots_adjust(wspace=0.4)

plt.show()

Hasilnya :

Figure 1 Hasil Gambar yang muncul

Page 3: Tugas Image Processing - Phyton

2. Cari gambar bebas ( grayscale ) kemudian cari nilai Gamma yang terbaik untuk gambar paling jelas

Langkah pertama Mengimpor gambar agar masuk ke library numpy, caranya adalah - Siapkan sebuah gambar dengan ekstensi GIF ( di sini saya menggunakan gambar dengan

nama file scene.gif)- Kemudian gambar tersebut di copy ke folder “SCRIPTS” pada directory python yang aktif

import matplotlib.pyplot as pltimport numpy as np

img = plt.imread('scene.gif')plt.imshow(img);

Hasilnya :

Langkah Kedua

import matplotlib.pyplot as pltimport numpy as npfrom skimage import data, img_as_floatfrom skimage import exposure

matplotlib.rcParams['font.size'] = 8

def plot_img_and_hist(img, axes, bins=256): img = img_as_float(img) ax_img, ax_hist = axes ax_cdf = ax_hist.twinx()

# Display image ax_img.imshow(img, cmap=plt.cm.gray) ax_img.set_axis_off()

# Display histogram ax_hist.hist(img.ravel(), bins=bins, histtype='step', color='black') ax_hist.ticklabel_format(axis='y', style='scientific', scilimits=(0, 0))

Page 4: Tugas Image Processing - Phyton

ax_hist.set_xlabel('Pixel intensity') ax_hist.set_xlim(0, 1) ax_hist.set_yticks([])

# Display cumulative distribution img_cdf, bins = exposure.cumulative_distribution(img, bins) ax_cdf.plot(bins, img_cdf, 'r') ax_cdf.set_yticks([])

return ax_img, ax_hist, ax_cdf

# Load an example imageimg = plt.imread('scene.gif')

# Gammagamma_corrected = exposure.adjust_gamma(img, 0.5)gamma_corrected2 = exposure.adjust_gamma(img, 1)gamma_corrected3 = exposure.adjust_gamma(img, 1.5)gamma_corrected4 = exposure.adjust_gamma(img, 2)

# Logarithmiclogarithmic_corrected = exposure.adjust_log(img, 1)

# Display resultsfig, axes = plt.subplots(nrows=2, ncols=5, figsize=(30, 10))

ax_img, ax_hist, ax_cdf = plot_img_and_hist(img, axes[:, 0])ax_img.set_title('Low contrast image')

y_min, y_max = ax_hist.get_ylim()ax_hist.set_ylabel('Number of pixels')ax_hist.set_yticks(np.linspace(0, y_max, 5))

ax_img, ax_hist, ax_cdf = plot_img_and_hist(gamma_corrected, axes[:, 1])ax_img.set_title('Gamma 1')

ax_img, ax_hist, ax_cdf = plot_img_and_hist(gamma_corrected2, axes[:, 2])ax_img.set_title('Gamma 2')

ax_img, ax_hist, ax_cdf = plot_img_and_hist(gamma_corrected3, axes[:, 3])ax_img.set_title('Gamma 3')

ax_img, ax_hist, ax_cdf = plot_img_and_hist(gamma_corrected4, axes[:, 4])ax_img.set_title('Gamma 4')

Page 5: Tugas Image Processing - Phyton

#ax_img, ax_hist, ax_cdf = plot_img_and_hist(logarithmic_corrected, axes[:, 3])#ax_img.set_title('Logarithmic correction')

ax_cdf.set_ylabel('Fraction of total intensity')ax_cdf.set_yticks(np.linspace(0, 1, 5))

# prevent overlap of y-axis labelsfig.subplots_adjust(wspace=0.4)plt.show()

Hasilnya :

Gambar dengan nilai gamma 0.5 menunjukkan gambar Nampak jelas di banding nilai di atasnya,

3. Untuk contrast streching , buktikan nilai S untuk 0 ≤ R<R1, R1 ≤ R < R2 dan R2 ≤ R < 2 – 1

Jawaban :

Titik (r1, s1) dan (r2,s2) merupakan kontrol bentuk fungsi tansformasi r1 =s1; r2 = s2 transformasi linear tanpa perubahan level r1=r2; s1=0 dan s2 = L-1 fungsi threshold (binnary)

rule nya adalah sebagai berikut : for 0 <= x <= r1   output = s1 / r1 * xfor r1 < x <= r2

Page 6: Tugas Image Processing - Phyton

  output = ((s2 - s1)/(r2 - r1))*(x - r1) + s1for r2 < x <= L - 1  output = ((L-1 - s2)/(L-1 - r2))*(x - r2) + s2

#include <iostream>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp> using namespace cv;using namespace std; int computeOutput(int, int, int, int, int); int main(){ Mat image = imread("pic.jpg"); Mat new_image = image.clone(); int r1, s1, r2, s2; cout<<"Enter r1: "<<endl; cin>>r1; cout<<"Enter s1: "<<endl; cin>>s1; cout<<"Enter r2: "<<endl; cin>>r2; cout<<"Enter s2: "<<endl; cin>>s2; for(int y = 0; y < image.rows; y++){ for(int x = 0; x < image.cols; x++){ for(int c = 0; c < 3; c++){ int output = computeOutput(image.at<Vec3b>(y,x)[c], r1, s1, r2, s2); new_image.at<Vec3b>(y,x)[c] = saturate_cast<uchar>(output); } } } namedWindow("Original Image", 1); imshow("Original Image", image); namedWindow("New Image", 1); imshow("New Image", new_image); waitKey(); return 0;}

Page 7: Tugas Image Processing - Phyton

int computeOutput(int x, int r1, int s1, int r2, int s2){ float result; if(0 <= x && x <= r1){ result = s1/r1 * x; }else if(r1 < x && x <= r2){ result = ((s2 - s1)/(r2 - r1)) * (x - r1) + s1; }else if(r2 < x && x <= 255){ result = ((255 - s2)/(255 - r2)) * (x - r2) + s2; } return (int)result;}

Output : r1 = 70 s1 = 0 r2 = 140 s2 = 255

4. implementasikan ( buat program histogram equalization) Bandingkan dengan implementasi scimage(scikit-image)

import matplotlibimportmatplotlib.pyplot as pltimport numpy as npfrom skimage import data, img_as_floatfrom skimage import exposure

matplotlib.rcParams['font.size'] = 8

Page 8: Tugas Image Processing - Phyton

def plot_img_and_hist(img, axes, bins=256): img = img_as_float(img) ax_img, ax_hist = axes ax_cdf = ax_hist.twinx()

# Display image ax_img.imshow(img, cmap=plt.cm.gray) ax_img.set_axis_off() ax_img.set_adjustable('box-forced')

# Display histogram ax_hist.hist(img.ravel(), bins=bins, histtype='step', color='black') ax_hist.ticklabel_format(axis='y', style='scientific', scilimits=(0, 0)) ax_hist.set_xlabel('Pixel intensity') ax_hist.set_xlim(0, 1) ax_hist.set_yticks([])

# Display cumulative distribution img_cdf, bins = exposure.cumulative_distribution(img, bins) ax_cdf.plot(bins, img_cdf, 'r') ax_cdf.set_yticks([])

return ax_img, ax_hist, ax_cdf

# Load an example imageimg = plt.imread('febrika.jpg')

# Contrast stretchingp2, p98 = np.percentile(img, (2, 98))img_rescale = exposure.rescale_intensity(img, in_range=(p2, p98))

# Equalizationimg_eq = exposure.equalize_hist(img)

# Adaptive Equalizationimg_adapteq = exposure.equalize_adapthist(img, clip_limit=0.03)

# Display resultsfig = plt.figure(figsize=(8, 5))axes = np.zeros((2,4), dtype=np.object)axes[0,0] = fig.add_subplot(2, 4, 1)for i in range(1,4): axes[0,i] = fig.add_subplot(2, 4, 1+i, sharex=axes[0,0], sharey=axes[0,0])for i in range(0,4): axes[1,i] = fig.add_subplot(2, 4, 5+i)

ax_img, ax_hist, ax_cdf = plot_img_and_hist(img, axes[:, 0])

Page 9: Tugas Image Processing - Phyton

ax_img.set_title('Low contrast image')

y_min, y_max = ax_hist.get_ylim()ax_hist.set_ylabel('Number of pixels')ax_hist.set_yticks(np.linspace(0, y_max, 5))

ax_img, ax_hist, ax_cdf = plot_img_and_hist(img_rescale, axes[:, 1])ax_img.set_title('Contrast stretching')

ax_img, ax_hist, ax_cdf = plot_img_and_hist(img_eq, axes[:, 2])ax_img.set_title('Histogram equalization')

ax_img, ax_hist, ax_cdf = plot_img_and_hist(img_adapteq, axes[:, 3])ax_img.set_title('Adaptive equalization')

ax_cdf.set_ylabel('Fraction of total intensity')ax_cdf.set_yticks(np.linspace(0, 1, 5))

# prevent overlap of y-axis labelsfig.subplots_adjust(wspace=0.4)

plt.show()

Hasilnya :

Page 10: Tugas Image Processing - Phyton

Jika di apply pada gambar lain (moon) :

5. Implementasi program kemiripan image berbasis histogram Equalization

import numpy as npimport matplotlibimport matplotlib.pyplot as plt

from skimage import data, img_as_floatfrom skimage.measure import structural_similarity as ssim

matplotlib.rcParams['font.size'] = 9

img = img_as_float(data.camera())rows, cols = img.shape

noise = np.ones_like(img) * 0.2 * (img.max() - img.min())noise[np.random.random(size=noise.shape) > 0.5] *= -1

def mse(x, y): return np.linalg.norm(x - y)

img_noise = img + noiseimg_const = img + abs(noise)

fig, (ax0, ax1, ax2) = plt.subplots(nrows=1, ncols=3, figsize=(8, 4), sharex=True,

Page 11: Tugas Image Processing - Phyton

sharey=True, subplot_kw={'adjustable':'box-forced'})

mse_none = mse(img, img)ssim_none = ssim(img, img, dynamic_range=img.max() - img.min())

mse_noise = mse(img, img_noise)ssim_noise = ssim(img, img_noise, dynamic_range=img_const.max() - img_const.min())

mse_const = mse(img, img_const)ssim_const = ssim(img, img_const, dynamic_range=img_noise.max() - img_noise.min())

label = 'MSE: %2.f, SSIM: %.2f'

ax0.imshow(img, cmap=plt.cm.gray, vmin=0, vmax=1)ax0.set_xlabel(label % (mse_none, ssim_none))ax0.set_title('Original image')

ax1.imshow(img_noise, cmap=plt.cm.gray, vmin=0, vmax=1)ax1.set_xlabel(label % (mse_noise, ssim_noise))ax1.set_title('Image with noise')

ax2.imshow(img_const, cmap=plt.cm.gray, vmin=0, vmax=1)ax2.set_xlabel(label % (mse_const, ssim_const))ax2.set_title('Image plus constant')

plt.show()

Hasil pemeriksaan kemiripan dengan gambar ke dua adalah 12%, sedangkan kemiripan dengan gambar terakhir adalah 84%

Page 12: Tugas Image Processing - Phyton

6. Tugas Paper

Hand Segmentation for Gesture Recognition in EGO-Vision( 2013 )

Paper ini membahas tentang pendeteksian gerakan tangan melalui citra dari EGO-Vision ( sudut pandang kamera orang pertama), yang sekarang sudah banyak gadget yang dipakai dari sudut pandang orang pertama seperti Google Glass, Vuzix SmartGlass yang sampai kini masih di gunakan menggunakan sensor suara saja.

Di sini Khan and Stoettinger ( penulis ) melakukan klasifikasi warna kulit , mereka menciptakan dasar pendeteksian warna kulit. Penulis melakukan testing data Bayesian Networks, Multilayers Perceptrons, AdaBoost, Naive Bayes, RBF Networks and Random Forest sedangkan hasilnya paling bagus adalah RF penelitian hanya dilakukan pada sample di indoor.

Pendeteksian di bagi jadi 3, Local appearance-based detection, Global Appearance-based detection, dimana yang global ini tangan harus di munculkan gambarnya dan motion based detection. Yang nantinya bias mendeteksi tangan bergerak dan background dengan gerakan yang berbeda.

Dengan RF penulis melakukan training pada histogram warna, dan kondisi yang berbeda beda membedakan warna tangan dengan menggabungkan informasi dari kedalaman warna RGB

untuk mengevaluasi kinerja metode yang di usulkan, algoritma di uji pada 2 dataset. SDSH dan EGO-HSGT . baru baru ini di terbitkan dataset publik dataset EDSH terdiri dalam video egosentris diperoleh untuk menganalisis kinerja beberapa metode deteksi tangan.di bagi dari 3 video, EDSH 1 video dalam kereta, EDSH 2 dan EDSH digunakan video test, keadaan indoor dan outdoor dengan banyak variasi pencahayaan.

Sedangkan untuk pengenalan citra bergerak menggunakan algoritma SVM yang di test menggunakan hanya 5 video test saja.