0% found this document useful (0 votes)
88 views31 pages

Ichcg

1. The document discusses code for performing various signal processing techniques on images, including upsampling and downsampling, fast Fourier transforms, convolution, correlation, and point/pixel intensity transformations like log and power-law transformations, contrast adjustments, histogram equalization, and thresholding. 2. Code examples are provided to demonstrate how to implement these techniques in Python using libraries like OpenCV, NumPy, SciPy, and matplotlib. The code loads images, applies various functions, and displays or saves the output images. 3. The techniques include downsampling and upsampling images, computing the discrete Fourier transform and its inverse, filtering images using convolution kernels, applying log and power-law transforms as well as contrast adjustments, equalizing

Uploaded by

arman khan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
88 views31 pages

Ichcg

1. The document discusses code for performing various signal processing techniques on images, including upsampling and downsampling, fast Fourier transforms, convolution, correlation, and point/pixel intensity transformations like log and power-law transformations, contrast adjustments, histogram equalization, and thresholding. 2. Code examples are provided to demonstrate how to implement these techniques in Python using libraries like OpenCV, NumPy, SciPy, and matplotlib. The code loads images, applies various functions, and displays or saves the output images. 3. The techniques include downsampling and upsampling images, computing the discrete Fourier transform and its inverse, filtering images using convolution kernels, applying log and power-law transforms as well as contrast adjustments, equalizing

Uploaded by

arman khan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 31

1

Practical No: 1
Date: 11/09/2023
Write program to demonstrate the following aspects of signal processing on
suitable data.
Practical 1 a)
Aim: Up-sampling and Down-sampling on image/ speech signal
Code for Down-sampling:
import os

os.sys.path

import cv2

import matplotlib.pyplot as plt

import numpy as np

img1 = cv2.imread('C:/Users/Arman/Pictures/IP/flower.jpg',0)

[m, n] = img1.shape

print('Image Shape:', m, n)

print('Original Image:')

plt.imshow(img1, cmap="gray")

plt.show()

f=4

img2 = np.zeros((m//f, n//f), dtype=np.int_)

for i in range(0, m, f):

for j in range(0, n, f):

try:

img2[i//f][j//f] = img1[i][j]

except IndexError:

pass

print('Down Sampled Image:')

plt.imshow(img2, cmap="gray")

plt.show()
2

Output:
3

Aim: Up-sampling and Down-sampling on image/ speech signal


Code for Up-sampling:
import os
os.sys.path
import cv2
import matplotlib.pyplot as plt
import numpy as np

img1 = cv2.imread(r"C:\Users\Arman\Pictures\IP\flower.jpg", 0)
[m, n] = img1.shape
print('Image Shape:', m, n)
print('Original Image:')
plt.imshow(img1, cmap="gray")
f=4
img2 = np.zeros((m//f, n//f), dtype=np.int_)
for i in range(0, m-1,f):
for j in range(0, n-1, f):
try:
img2[i//f][j//f] = img1[i][j]
except IndexError:
pass

img3 = np.zeros((m, n), dtype=np.int_)


for i in range(1, m-(f-1), f):
for j in range(0, n-(f-1)):
img3[i:i+(f-1), j] = img2[i//f][j//f]

for i in range(0, m-1):


for j in range(1, n-1, f):
img3[i, j:j+(f-1)] = img3[i, j-1]
4

print('Up Sampled Image:')


plt.imshow(img3, cmap="gray")
plt.show()
Output:
5

Practical 1 b)
Aim: Fast Fourier Transform to compute DFT
Code:
import numpy as np

from PIL import Image

def signaltonoise(a, axis=0, ddof=0):

a = np.asanyarray(a)

m = a.mean(axis)

sd = a.std(axis=axis, ddof=ddof)

return np.where(sd == 0, 0, m/sd)

from scipy.fftpack import fft2, ifft2

#from scipy.stats import signaltonoise

import matplotlib.pyplot as plt

im = np.array(Image.open(r"C:\Users\Arman\Pictures\IP\flower.jpg").convert('L'))

freq = fft2(im)

im1 = ifft2(freq).real

snr = signaltonoise(im1, axis=None)

print('SNR FOR THE IMAGE OBTAINED AFTER RECONSTRUCTION = ' + str(snr))

assert(np.allclose(im, im1))

plt.figure(figsize=(20,10))

plt.subplot(121)

plt.imshow(im, cmap='gray')

plt.axis('off')

plt.title('ORIGINAL IMAGE', size=20)

plt.subplot(122)

plt.imshow(im1, cmap='gray')

plt.axis('off')

plt.title('IMAGE OBTAINED AFTER RECONSTRUCTION', size=20)

plt.show()
6

Output:
7

Practical No: 2
Date: 11/09/2023
Aim: Write program to perform Convolution and Correlation of gray scale
image.
Code:
import cv2
import numpy as np
import matplotlib.pyplot as plt
image = cv2.imread(r"C:\Users\Arman\Pictures\IP\flower.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
fig, ax = plt.subplots(1, figsize=(12,8))
plt.imshow(image)
#plt.show()
abc=np.ones((3,3))
kernel = np.ones((3, 3), np.float32) / 9
img = cv2.filter2D(image, -1, kernel)
fig, ax = plt.subplots(1,2,figsize=(10,6))
ax[0].imshow(image)
ax[1].imshow(img)
#plt.show()
kernel = np.array([[0, -1, 0],
[-1, 5, -1],
[0, -1, 0]])
img = cv2.filter2D(image, -1, kernel)
fig, ax = plt.subplots(1,2,figsize=(10,6))
ax[0].imshow(image)
ax[1].imshow(img)
#plt.show()
8

Output:
9

Practical No: 3
Date: 11/09/2023
Aim: Write program to perform the DFT of 4x4 Gray Scale Image.
Code:
#importing packages
import numpy as np
import cv2
from matplotlib import pyplot as plt

#geting the input image and covert to gray scale


img = cv2.imread(r"C:\Users\Arman\Pictures\IP\flower.jpg",0)

# Transform the image to improve the speed in the fourier transform calculation
rows, cols = img.shape
optimalRows = cv2.getOptimalDFTSize(rows)
optimalCols = cv2.getOptimalDFTSize(cols)
optimalImg = np.zeros((optimalRows, optimalCols))
optimalImg[:rows, :cols] = img

# Calculate the discrete Fourier transform


dft = cv2.dft(np.float32(optimalImg),flags = cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)

# output of CV2.dft() function will be 3-D numpy arry, for 2-D Output, 2D DFT as two part
complex and real part.
f_complex = dft_shift[:,:,0] + 1j*dft_shift[:,:,1]
f_abs = np.abs(f_complex) + 1 # lie between 1 and 1e6
f_bounded = 20 * np.log(f_abs)
f_img = 255 * f_bounded / np.max(f_bounded)
f_img = f_img.astype(np.uint8)
10

# Reconstruct the image using the inverse Fourier transform


i_shift = np.fft.ifftshift(dft_shift)
result = cv2.idft(i_shift)
result = cv2.magnitude(result[:, :, 0], result[:, :, 1])

# #Dispaying input image, Gray Scale image, DFT of the Input Image
images = [optimalImg, f_img, result]
imageTitles = ['Input image', ' DFT ', 'Reconstructed image']

for i in range(len(images)):
plt.subplot(1, 3, i + 1)
plt.imshow(images[i], cmap='gray')
plt.title(imageTitles[i])
plt.xticks([])
plt.yticks([])
plt.show()

# for hold the Dispay untill key press


cv2.waitKey()
cv2.destroyAllWindows()
Output:
11

Practical No: 4
Date: 11/09/2023
Aim: Write program to implement point/pixel intensity transformations
such as:
1. Log and Power-law transformations
2. Contrast adjustments
3. Histogram equalization
4. Thresholding, and halftoning operations
Code for Log and Power-law transformations:
import cv2
import numpy as np
import matplotlib.pyplot as plt

# Open the image.


img = cv2.imread(r"C:\Users\Arman\Pictures\IP\flower.jpg")

# Apply log transform.


c = 255/(np.log(1 + np.max(img)))
log_transformed = c * np.log(1 + img)

# Specify the data type.


log_transformed = np.array(log_transformed, dtype = np.uint8)

# Save the output.


cv2.imwrite(r"C:\Users\Arman\Pictures\IP\flower1.jpg", log_transformed)

plt.imshow(img)
plt.show()
plt.imshow(log_transformed)
plt.show()
Output:
12
13

import cv2
import numpy as np
import matplotlib.pyplot as plt
# Open the image.
img = cv2.imread(r"C:\Users\Arman\Pictures\IP\flower.jpg")
plt.imshow(img)
plt.show()
# Trying 4 gamma values.
for gamma in [0.1, 0.5, 1.2, 2.2,5]:

# Apply gamma correction.


gamma_corrected = np.array(255*(img / 255) ** gamma, dtype = 'uint8')

# Save edited images.


cv2.imwrite('gamma_transformed'+str(gamma)+'.jpg', gamma_corrected)

cv2.imwrite('gamma_transformed'+str(gamma)+'.jpg', gamma_corrected)
plt.imshow(gamma_corrected)
plt.show()
14
15
16

Code for ontrast adjustments:


import numpy as np
from skimage.io import imread
from skimage.color import rgb2gray
from skimage import data, img_as_float, img_as_ubyte, exposure, io, color
from PIL import Image, ImageEnhance, ImageFilter
from scipy import ndimage, misc
import matplotlib.pyplot as pylab
import cv2
def plot_image(image, title=""):
pylab.title(title, size=10)
pylab.imshow(image)
pylab.axis('off')

def plot_hist(r,g,b,title=""):
r,g,b=img_as_ubyte(r),img_as_ubyte(g),img_as_ubyte(b)
pylab.hist(np.array(r).ravel(),bins=256, range=(0,256),color='r',alpha=0.3)
pylab.hist(np.array(g).ravel(),bins=256, range=(0,256),color='g',alpha=0.3)
pylab.hist(np.array(b).ravel(),bins=256, range=(0,256),color='b',alpha=0.3)
pylab.xlabel('Pixel Values', size=20)
pylab.ylabel('Frequency',size=20)
pylab.title(title,size=10)

im=Image.open(r"C:\Users\Arman\Pictures\IP\flower.jpg")
im_r,im_g,im_b=im.split()
pylab.style.use('ggplot')
pylab.figure(figsize=(15,5))
pylab.subplot(121)
plot_image(im)
pylab.subplot(122)
17

plot_hist(im_r,im_g,im_b)
pylab.show()
def contrast(c):
return 0 if c<50 else (255 if c>150 else int((255*c-22950)/48))
imc=im.point(contrast)
im_rc,im_gc,im_bc=imc.split()
pylab.style.use('ggplot')
pylab.figure(figsize=(15,5))
pylab.subplot(121)
plot_image(imc)
pylab.subplot(122)
plot_hist(im_rc,im_gc,im_bc)
pylab.yscale('log')
pylab.show()
Output:
18

Code for Histogram Equalization:


import cv2
from matplotlib import pyplot as plt
img = cv2.imread(r"C:\Users\Arman\Pictures\IP\flower.jpg",0)

hist = cv2.calcHist([img],[0],None,[256],[0,256])
eq = cv2.equalizeHist(img)
cdf = hist.cumsum()
cdfnmhist = cdf * hist.max()/ cdf.max()
histeq = cv2.calcHist([eq],[0],None,[256],[0,256])
cdfeq = histeq.cumsum()
cdfnmhisteq = cdfeq * histeq.max()/ cdf.max()
plt.subplot(221), plt.imshow(img,'gray')
plt.subplot(222), plt.plot(hist), plt.plot(cdfnmhist)
plt.subplot(223), plt.imshow(eq,'gray')
plt.subplot(224), plt.plot(histeq), plt.plot(cdfnmhisteq)
plt.xlim([0,256])
plt.show()
Output:
19

Code for Thresholding:


import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread(r"C:\Users\Arman\Pictures\IP\flower.jpg",0)
ret,thresh1 = cv.threshold(img,127,255,cv.THRESH_BINARY)
ret,thresh2 = cv.threshold(img,127,255,cv.THRESH_BINARY_INV)
ret,thresh3 = cv.threshold(img,127,255,cv.THRESH_TRUNC)
ret,thresh4 = cv.threshold(img,127,255,cv.THRESH_TOZERO)
ret,thresh5 = cv.threshold(img,127,255,cv.THRESH_TOZERO_INV)
titles = ['Original Image','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]
for i in range(6):
plt.subplot(2,3,i+1),plt.imshow(images[i],'gray',vmin=0,vmax=255)
plt.title(titles[i])
plt.xticks([]),plt.yticks([])
plt.show()
Output:
20
21

Practical No: 5
Date: 18/03/2023
Aim: Write program to apply various enhancements on images using image
derivatives by implementing Gradient and Laplacian operations.
Code:
#GRADIENT
import numpy as np
from scipy import signal, misc, ndimage
from skimage import filters, feature, img_as_float
from skimage.io import imread
from skimage.color import rgb2gray
from PIL import Image, ImageFilter
import matplotlib.pylab as pylab
from skimage.transform import rescale

def plot_image(image, title=""):


pylab.title(title, size=20),
pylab.imshow(image)
pylab.axis('off')
def plot_hist(r,g,b,title=""):
r,g,b=img_as_ubyte(r),img_as_ubyte(g),img_as_ubyte(b)
pylab.hist(np.array(r).ravel(),bins=256, range=(0,256),color='r',alpha=0.3)
pylab.hist(np.array(g).ravel(),bins=256, range=(0,256),color='g',alpha=0.3)
pylab.hist(np.array(b).ravel(),bins=256, range=(0,256),color='b',alpha=0.3)
pylab.xlabel('Pixel Values', size=20)
pylab.ylabel('Frequency',size=20)
pylab.title(title,size=10)
ker_x=[[-1,1]]
22

ker_y=[[-1],[1]]
im=rgb2gray(imread(r"C:\Users\Arman\Pictures\IP\flower.jpg"))
im_x=signal.convolve2d(im,ker_x,mode='same')
im_y=signal.convolve2d(im,ker_y,mode='same')
im_mag=np.sqrt(im_x**2+im_y**2)
im_dir=np.arctan(im_y/im_x)
pylab.gray()
pylab.figure(figsize=(30,20))
pylab.subplot(231)
plot_image(im,'Original')
pylab.subplot(232)
plot_image(im_x,'Gradian_x')
pylab.subplot(233)
plot_image(im_y,'Grad+y')
pylab.subplot(234)
plot_image(im_mag,'||grad||')
pylab.subplot(235)
plot_image(im_dir, r'$\theta$')
pylab.subplot(236)
pylab.plot(range(im.shape[1]), im[0,:], 'b-', label=r'$f(x,y)|_{x=0}$',
linewidth=5)
pylab.plot(range(im.shape[1]), im_x[0,:], 'r-', label=r'$grad_x (f(x,y))|_{x=0}$')
pylab.title(r'$grad_x (f(x,y))|_{x=0}$',size=30)
pylab.legend(prop={'size':20})
pylab.show()
#LAPLACIAN
ker_laplacian=[[0,-1,0],
[-1,4,-1],
23

[0,-1,0]]
im=rgb2gray(imread(r"C:\Users\Arman\Pictures\IP\flower.jpg"))
im1=np.clip(signal.convolve2d(im, ker_laplacian, mode='same'),0,1)
pylab.gray()
pylab.figure(figsize=(20,10))
pylab.subplot(121)
plot_image(im, 'Original')
pylab.subplot(122)
plot_image(im1,'laplacian Convolved')
pylab.show()
Output:
24
25

Practical No: 6
Date: 18/03/2023
Aim: Write a program to apply various image enhancement using image
derivatives by implementing smoothing, sharpening and unsharp masking
filters for generating suitable images for specific application requirements.
Code:
import numpy as np
from scipy import signal, misc, ndimage
from skimage import filters, feature, img_as_float
from skimage.io import imread
from skimage.color import rgb2gray
from PIL import Image, ImageFilter
import matplotlib.pylab as pylab
from skimage.transform import rescale
def plot_hist(r,g,b,title=""):
r,g,b=img_as_ubyte(r),img_as_ubyte(g),img_as_ubyte(b)
pylab.hist(np.array(r).ravel(),bins=256, range=(0,256),color='r',alpha=0.3)
pylab.hist(np.array(g).ravel(),bins=256, range=(0,256),color='g',alpha=0.3)
pylab.hist(np.array(b).ravel(),bins=256, range=(0,256),color='b',alpha=0.3)
pylab.xlabel('Pixel Values', size=20)
pylab.ylabel('Frequency',size=20)
pylab.title(title,size=10)
def plot_image(image, title=""):
pylab.title(title, size=10)
pylab.imshow(image)
pylab.axis('off')
# sharpening of images
from skimage.filters import laplace
im=rgb2gray(imread(r"C:\Users\Arman\Pictures\IP\flower.jpg"))
im1=np.clip(laplace(im)+im,0,1)
26

pylab.figure(figsize=(10,15))
pylab.subplot(121), plot_image(im, 'Original Image')
pylab.subplot(122), plot_image(im1,'Sharpened Image')
pylab.tight_layout()
pylab.show()

def rgb2gray(im):
return np.clip(0.2989*im[...,0]+0.5870*im[...,1]+0.1140*im[...,2],0,1)

im=rgb2gray(img_as_float(imread(r"C:\Users\Arman\Pictures\IP\flower.jpg")))
im_blurred=ndimage.gaussian_filter(im,3)
im_detail=np.clip(im-im_blurred,0,1)
pylab.gray()
fig, axes=pylab.subplots(nrows=2, ncols=3, sharex=True, sharey=True, figsize=(15,15))
axes=axes.ravel()
axes[0].set_title('Original Image',size=15)
axes[0].imshow(im)
axes[1].set_title('Blurred Image, signam=5', size=15)
axes[1].imshow(im_blurred)
axes[2].set_title('Detail Image', size=15)
axes[2].imshow(im_detail)
alpha=[1, 5, 10]
for i in range(3):
im_sharp=np.clip(im+alpha[i]*im_detail,0,1)
axes[3+i].imshow(im_sharp)
axes[3+i].set_title('Sharpened Image, alpha='+str(alpha[i]),size=15)
for ax in axes:
ax.axis('off')
fig.tight_layout()
pylab.show()
27

Output:
28
29

Practical No: 7
Date: 13/04/2023
Aim: Write a program to apply edge detection techniques such as Sobel
and Canny to extract meaningful information from the given image
samples.
Code:

Output:
30

Practical No: 8
Date: 13/04/2023
Aim: Write a program to implement various morphological image
processing techniques
Code:

Output:
31

Practical No: 9
Date: 13/04/2023
Aim: Write a program to implement image segmentation.
Code:

Output:

You might also like