0% found this document useful (0 votes)
43 views

Code For Ass4 Q1

The document contains Python code that implements a Markov random field model for image denoising. It defines functions to generate a noisy input image, initialize cluster and message variables, perform belief propagation to infer a cleaned output image, and calculate the number of mislabeled pixels compared to the original clean image. The code is tested on an example where it achieves an average of 2005 mislabeled pixels after denoising images with different levels of added noise.

Uploaded by

Tushar Goel
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
43 views

Code For Ass4 Q1

The document contains Python code that implements a Markov random field model for image denoising. It defines functions to generate a noisy input image, initialize cluster and message variables, perform belief propagation to infer a cleaned output image, and calculate the number of mislabeled pixels compared to the original clean image. The code is tested on an example where it achieves an average of 2005 mislabeled pixels after denoising images with different levels of added noise.

Uploaded by

Tushar Goel
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

5/25/2020 Code for Ass4 Q1

In [1]:

import numpy as np
from random import random

In [2]:

y = [[0 for i in range(100)] for j in range(100)]


for i in range(100):
for j in range(100):
if np.sqrt((i-50)**2 + (j-50)**2)<25:
y[i][j] = 1

In [10]:

import matplotlib.pyplot as plt


plt.imshow(y)
plt.show()

In [11]:

def impute(y, p):


y_1 = [[0 for i in range(100)] for j in range(100)]
for i in range(100):
for j in range(100):
y_1[i][j] = y[i][j]
if p > random():
if y[i][j] == 1:
y_1[i][j] = 0

else:
y_1[i][j] = 1
return y_1
#plt.imshow(y_1)
#plt.show()

file:///C:/Users/tushar/AppData/Local/Packages/Microsoft.MicrosoftEdge_8wekyb3d8bbwe/TempState/Downloads/Code for Ass4 Q1 (1).html 1/9


5/25/2020 Code for Ass4 Q1

In [12]:

# define clusters

theta = 0.8
gamma = 0.5

def init_clusters(theta, gamma):

c5 = [[[[0 for i in range(2)] for j in range(2)] for j in range(100)] for k in rang


e(99)]
for i in range(99):
for j in range(100):
c5[i][j] = [[1+theta, 1-theta], [1-theta, 1+theta]]

c5 = np.log(c5)

c4 = [[[[0 for i in range(2)] for j in range(2)] for j in range(99)] for k in range


(100)]
for i in range(100):
for j in range(99):
c4[i][j] = [[1+theta, 1-theta], [1-theta, 1+theta]]

c4 = np.log(c4)

c3 = [[[[0 for i in range(2)] for j in range(2)] for j in range(100)] for k in rang


e(100)]
for i in range(100):
for j in range(100):
c3[i][j] = [[1+gamma, 1-gamma], [1-gamma, 1+gamma]]

c3 = np.log(c3)

c2 = [[[0 for i in range(2)] for j in range(100)] for k in range(100)]


for i in range(100):
for j in range(100):
c2[i][j] = [1, 1]

c2 = np.log(c2)

c1 = [[[0 for i in range(2)] for j in range(100)] for k in range(100)]


for i in range(100):
for j in range(100):
c1[i][j] = [1, 1]

c1 = np.log(c1)

return c1, c2, c3, c4, c5

file:///C:/Users/tushar/AppData/Local/Packages/Microsoft.MicrosoftEdge_8wekyb3d8bbwe/TempState/Downloads/Code for Ass4 Q1 (1).html 2/9


5/25/2020 Code for Ass4 Q1

In [13]:

def init_messages():

m5 = [[[[1 for i in range(2)] for j in range(2)] for j in range(100)] for k in rang


e(99)]
#for i in range(0,98):
# for j in range(100):
# for k in range(2):
# print(i,j,k)
# m5[i][j][k] = [1,1]

m4 = [[[[0 for i in range(2)] for j in range(2)] for j in range(99)] for k in range


(100)]
for i in range(100):
for j in range(99):
for k in range(2):
m4[i][j][k] = [0,0]

m3 = [[[[0 for i in range(2)] for j in range(2)] for j in range(100)] for k in rang


e(100)]
for i in range(100):
for j in range(100):
for k in range(2):
m3[i][j][k] = [0,0]

m2 = [[[0 for i in range(2)] for j in range(100)] for k in range(100)]


for i in range(100):
for j in range(100):
m2[i][j] = [0, 0]

m1 = [[[[0 for i in range(2)] for g in range(5)] for j in range(100)] for k in rang


e(100)]
for i in range(100):
for j in range(100):
for k in range(5):
m1[i][j][k] = [0,0]

return m1, m2, m3, m4, m5

In [ ]:

file:///C:/Users/tushar/AppData/Local/Packages/Microsoft.MicrosoftEdge_8wekyb3d8bbwe/TempState/Downloads/Code for Ass4 Q1 (1).html 3/9


5/25/2020 Code for Ass4 Q1

In [14]:

def map_inference(c, m, y1):


c1 = c[0]
c2 = c[1]
c3 = c[2]
c4 = c[3]
c5 = c[4]

m1 = m[0]
m2 = m[1]
m3 = m[2]
m4 = m[3]
m5 = m[4]

for s in range(6):

for i in range(99):
for j in range(100):
#a = max(c5[i][j][0][k]*m1[i+1][j][0][k] for k in range(2))
#b = max(c5[i][j][1][k]*m1[i+1][j][0][k] for k in
m5[i][j][0] = [max(c5[i][j][g][k] + m1[i+1][j][0][k] for k in range(2))
for g in range(2)]
m5[i][j][1] = [max(c5[i][j][k][g] + m1[i][j][2][k] for k in range(2)) f
or g in range(2)]

for i in range(100):
for j in range(99):
m4[i][j][0] = [max(c4[i][j][g][k] + m1[i][j+1][1][k] for k in range(2))
for g in range(2)]
m4[i][j][1] = [max(c4[i][j][k][g] + m1[i][j][3][k] for k in range(2)) f
or g in range(2)]

for i in range(100):
for j in range(100):
m3[i][j][0] = [c3[i][j][g][y1[i][j]] for g in range(2)]

for i in range(100):
for j in range(100):
a = [1,1]
b = [1,1]
c = [1,1]
d = [1,1]
if i-1>0:
a = m5[i-1][j][1]
if j-1>0:
b = m4[i][j-1][1]

if i<99:
c = m5[i][j][0]

if j<99:
d = m4[i][j][0]

m1[i][j][0] = [c1[i][j][k] + m3[i][j][0][k] + b[k] + c[k] + d[k] for k


in range(2)]
m1[i][j][1] = [c1[i][j][k] + m3[i][j][0][k] + a[k] + c[k] + d[k] for k
in range(2)]
file:///C:/Users/tushar/AppData/Local/Packages/Microsoft.MicrosoftEdge_8wekyb3d8bbwe/TempState/Downloads/Code for Ass4 Q1 (1).html 4/9
5/25/2020 Code for Ass4 Q1

m1[i][j][2] = [c1[i][j][k] + m3[i][j][0][k] + a[k] + b[k] + d[k] for k


in range(2)]
m1[i][j][3] = [c1[i][j][k] + m3[i][j][0][k] + a[k] + c[k] + b[k] for k
in range(2)]
m1[i][j][4] = [c1[i][j][k] + b[k] + a[k] + c[k] + d[k] for k in range(2
)]

x = [[0 for i in range(100)] for j in range(100)]

for i in range(100):
for j in range(100):
a = [1,1]
b = [1,1]
c = [1,1]
d = [1,1]
if i-1>0:
a = m5[i-1][j][1]
if j-1>0:
b = m4[i][j-1][1]

if i<99:
c = m5[i][j][0]

if j<99:
d = m4[i][j][0]

s = [c1[i][j][k] + m3[i][j][0][k] +a[k] + b[k] + c[k] + d[k] for k in range


(2)]

if s[1] > s[0]:


x[i][j] = 1

return x

file:///C:/Users/tushar/AppData/Local/Packages/Microsoft.MicrosoftEdge_8wekyb3d8bbwe/TempState/Downloads/Code for Ass4 Q1 (1).html 5/9


5/25/2020 Code for Ass4 Q1

In [15]:

def denoise(theta, gamma):

y1 = impute(y, 0.1)
y2 = impute(y, 0.2)
y3 = impute(y, 0.3)

c = init_clusters(theta,gamma)
#m1, m2, m3, m4, m5 = init_messages()
m = init_messages()

r1 = map_inference(c, m, y1)
r2 = map_inference(c, m, y2)
r3 = map_inference(c, m, y3)

return r1, r2, r3

In [22]:

#fig = plt.figure()
#a = fig.add_subplot(1, 2, 1)
#imgplot = plt.imshow(y2)
#a.set_title('Before')
#plt.colorbar(ticks=[0.1, 0.3, 0.5, 0.7], orientation='horizontal')
#a = fig.add_subplot(1, 2, 2)
#imgplot = plt.imshow(r2)
#imgplot.set_clim(0.0, 0.7)
#a.set_title('After')
#plt.colorbar(ticks=[0.1, 0.3, 0.5, 0.7], orientation='horizontal')

#print(theta, gamma)

In [17]:

def mislabels(x, y):


a = 0
for i in range(100):
for j in range(100):
if x[i][j] != y[i][j]:
a = a+1

return a

In [18]:

r = denoise(0.1, 0.4)

av_mislabels = np.average([mislabels(r[i],y) for i in range(3)])

file:///C:/Users/tushar/AppData/Local/Packages/Microsoft.MicrosoftEdge_8wekyb3d8bbwe/TempState/Downloads/Code for Ass4 Q1 (1).html 6/9


5/25/2020 Code for Ass4 Q1

In [19]:

av_mislabels

Out[19]:

2005.6666666666667

In [20]:

y1 = impute(y, 0.1)
y2 = impute(y, 0.2)
y3 = impute(y, 0.3)

fig = plt.figure()
a = fig.add_subplot(3, 2, 2)
imgplot = plt.imshow(y3)
a.set_title('Before')
#plt.colorbar(ticks=[0.1, 0.3, 0.5, 0.7], orientation='horizontal')
a = fig.add_subplot(3, 2, 1)
imgplot = plt.imshow(r[2])
#imgplot.set_clim(0.0, 0.7)
a.set_title('After')
#plt.colorbar(ticks=[0.1, 0.3, 0.5, 0.7], orientation='horizontal')
print("p=0.3","theta = 0.6", "gamma = 0.1")

p=0.3 theta = 0.6 gamma = 0.1

file:///C:/Users/tushar/AppData/Local/Packages/Microsoft.MicrosoftEdge_8wekyb3d8bbwe/TempState/Downloads/Code for Ass4 Q1 (1).html 7/9


5/25/2020 Code for Ass4 Q1

In [21]:

import matplotlib.pyplot as plt


plt.rcParams.update({'font.size': 8})
#plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace, hspace=5)

fig=plt.figure(figsize=(8, 8))
a = fig.add_subplot(2, 4, 1)
imgplot = plt.imshow(y1)
a.set_title("p=0.1, Before")
a = fig.add_subplot(2, 4, 2)
imgplot = plt.imshow(r[0])
a.set_title("p=0.1, After")

a = fig.add_subplot(2, 4, 3)
imgplot = plt.imshow(y2)
a.set_title("p=0.2, Before")
a = fig.add_subplot(2, 4, 4)
imgplot = plt.imshow(r[1])
a.set_title("p=0.2, After")

a = fig.add_subplot(2, 4, 5)
imgplot = plt.imshow(y3)
a.set_title("p=0.3, Before")
a = fig.add_subplot(2, 4, 6)
imgplot = plt.imshow(r[2])
a.set_title("p=0.3, After")

print("theta=0.4", "gamma = 0.3")

theta=0.4 gamma = 0.3

file:///C:/Users/tushar/AppData/Local/Packages/Microsoft.MicrosoftEdge_8wekyb3d8bbwe/TempState/Downloads/Code for Ass4 Q1 (1).html 8/9


5/25/2020 Code for Ass4 Q1

In [25]:

np.shape(r[1])

Out[25]:

(100, 100)

In [27]:

# Ascii for y:

k = []
for i in range(100):
for j in range(100):
k.append([i,j,y[i][j]])

In [34]:

g = np.reshape(y,10000)

In [39]:

list_1 = []
list_2 = []
for i in range(100):
for j in range(100):
list_1.append(i)
list_2.append(j)
import pandas
df = pandas.DataFrame(data={"i": list_1, "j": list_2, "val_ij": g})
df.to_csv("./y.csv", sep=',',index=False)

In [41]:

g = np.reshape(y1,10000)

df = pandas.DataFrame(data={"i": list_1, "j": list_2, "val_ij": g})


df.to_csv("./y1.csv", sep=',',index=False)

In [42]:

g = np.reshape(r[1],10000)

df = pandas.DataFrame(data={"i": list_1, "j": list_2, "val_ij": g})


df.to_csv("./r1.csv", sep=',',index=False)

file:///C:/Users/tushar/AppData/Local/Packages/Microsoft.MicrosoftEdge_8wekyb3d8bbwe/TempState/Downloads/Code for Ass4 Q1 (1).html 9/9

You might also like