Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 14

Họ và Tên: Hồ Tấn Hiếu

MSSV: 18230031

Bài tập về nhà

Code:

import matplotlib.image as mpimg

import numpy as np

import matplotlib.pyplot as plt

import scipy.ndimage as nd

import scipy.misc as misc

import cv2

import numpy.fft as fft

from skimage.io import imread

from skimage import data_dir

from skimage.transform import radon, rescale

from skimage import data, img_as_float

from skimage import exposure

from random import seed

from random import gauss


image = cv2.imread('concho.jpg',0)

#plt.imshow(image)

#plt.show()

#image = rescale(image, scale=0.4, mode='reflect', multichannel=False)

#fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 4.5))

#ax1.set_title("Original")

#ax1.imshow(image,cmap=plt.cm.Greys_r)

theta = np.linspace(0., 180., 100, endpoint=False)

sinogram = radon(image, theta=theta, circle=True)

plt.imshow(sinogram)

plt.show()

from skimage.transform import iradon

#theta = np.linspace(0., 180., 100, endpoint=False)

#print(len(theta))

#reconstruction_fbp = iradon(sinogram, theta=theta, circle=True)

#plt.imshow(reconstruction_fbp)
#plt.show()

#ax2.set_title("Radon transform\n(Sinogram)")

#ax2.set_xlabel("Projection angle (deg)")

#ax2.set_ylabel("Projection position (pixels)")

#ax2.imshow(sinogram, cmap=plt.cm.Greys_r,

# extent=(0, 180, 0, sinogram.shape[0]), aspect='auto')

#plt.show()

A1= fft.fft2(sinogram)

#A1=fft.fftshift(A1)

#A1= np.abs(A1)

#plt.imshow(A1)

#plt.show()

#print(A1)

#bien doi gauss

import numpy as np

x, y = np.meshgrid(np.linspace(-1,1,100), np.linspace(-1,1,200))
d = np.sqrt(x*x+y*y)

sigma =0.01

g = np.exp(-( (d)**2 / ( 2.0 * sigma**2 ) ) )

#plt.imshow(g)

#plt.show()

A2= fft.fft2(g)#fourier h

#A2= fft.fftshift(A2)

#A2=np.abs(A2)

#plt.imshow(A2)

#plt.show()

A1=np.array(A1)

A2=np.array(A2)

A3= (A1*A2)#

A4= np.fft.ifft2(A3) #fourier ngược

A4=fft.fftshift(A4)

#fig,ax= subplots()

#ax.scatter(A4.real,A4.imag)
A41=np.abs(A4)

plt.imshow(A41)

plt.show()

#misc.imsave("A4.bmp")

#fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 4.5))

#ax1.set_title("sinogram dau")

#ax1.set_xlabel("Projection angle (deg)")

#ax1.set_ylabel("Projection position (pixels)")

#ax1.imshow(A4, cmap=plt.cm.Greys_r,

# extent=(0, 180, 0, sinogram.shape[0]), aspect='auto')

#ax2.set_title("Sinogram sau")

#ax2.set_xlabel("Projection angle (deg)")

#ax2.set_ylabel("Projection position (pixels)")

#ax2.imshow(A4, cmap=plt.cm.Greys_r,

# extent=(0, 180, 0, sinogram.shape[0]), aspect='auto')

#tai tao hinh ban dau

#from skimage.transform import iradon

#theta = np.linspace(0., 180., 100, endpoint=False)


#print(len(theta))

reconstruction_fbp = iradon(A4, theta=theta, circle=True)

plt.imshow(reconstruction_fbp)

plt.show()

seed(1)

gauss_noise=np.zeros((200,100))

#for -in range (10):

#value=gauss(0,1)

for i in range(0,200):

for j in range(0,100):

gauss_noise[i][j]=gauss(0,5000)

A5=A4+gauss_noise

#A5=fft.fftshift(A5)

#fig,ax= subplots()

#ax.scatter(A4.real,A4.imag)

A5=np.abs(A5)

plt.imshow(A5)

plt.show()

** Thay đổi giá trị sigma

Sigma = 0.01
Ta được kết quả:
Sigma = 1
Sigma = 0.005
** thay đổi gauss

gauss(0,5000)

Gauss(0,20000)
gauss(0,1)

Nhận xét:

Khi thay đổi giá trị sigma thì chất lượng hình ảnh của 0.05 là tốt nhất từ đó cho
thấy nếu sigma quá lớn (1) ảnh sẽ không thấy gì khi sigma quá nhỏ (0.01) hình ảnh
bị mờ.
Khi thay đổi giá trị của gauss

 Gauss(0,5000) giống với Gauss(0,20000) có độ nhiễu lớn


 Gauss(0,1) độ nhiễu giảm

You might also like