###### tags: `影像處理`
# *2022/05/03 影像處理 HW08*
## Coding Part
### 實戰(1)
#### 題目:

#### 程式碼:
```
#實戰(1)
import numpy as np
import cv2
import math
from numpy.random import *
from matplotlib import pyplot as plt
from google.colab import drive
from google.colab.patches import *
drive.mount('/content/drive')
image_1 = cv2.imread("/content/drive/My Drive/Colab Notebooks/imgs/Pattern.bmp",-1)
def gaussian_noise(f,scale):
g = f.copy()
nr,nc = f.shape[:2]
for x in range(nr):
for y in range(nc):
value = f[x,y] + normal(0,scale)
g[x,y] = np.uint8(np.clip(value,0,255))
return g
def histogram(img):
if img.ndim!=3:
hist = cv2.calcHist([img],[0],None,[256],[0,256])
else:
gray_img = cv2.cvtColor(img,cv.COLOR_BGR2GRAY)
hist = cv2.calHist([gray_img],[0],None,[256],[0,256])
return hist
def std_dev(f1,f2):
array_1 = f1.copy()
array_2 = f2.copy()
array_3 = array_2-array_1
st_dev = np.std(array_3)
return st_dev
image_G_1 = gaussian_noise(image_1,30)
avi_1 = cv2.blur(image_G_1,(5,5))
#顯示Picture_01
titles=['image_G_1','Histogram','Average Image','Average Image Histogram']
plt.figure(figsize=(25,5))
plt.subplot(141)
plt.title(titles[0],fontsize=15,color='r')
plt.imshow(image_G_1,'gray')
plt.subplot(142)
plt.title(titles[1],fontsize=15,color='r')
plt.hist(image_G_1.ravel(),256,[0,256])
plt.xlim([0,256])
plt.xlabel('Intensity')
plt.ylabel('#Intensities')
plt.subplot(143)
plt.title(titles[2],fontsize=15,color='r')
plt.imshow(avi_1,'gray')
plt.subplot(144)
plt.title(titles[3],fontsize=15,color='r')
plt.hist(avi_1.ravel(),256,[0,256])
plt.xlim([0,256])
plt.xlabel('Intensity')
plt.ylabel('#Intensities')
plt.tight_layout()
plt.show()
array = np.zeros((400,400))
std_dev_1 = std_dev(array,image_1)
print("The original std ",std_dev_1)
print("\n")
std_dev_3 = std_dev(image_G_1,avi_1)
print("Average Image Noise std",std_dev_3)
```
#### 輸出結果:

The original std 76.729409900963
Average Image Noise std 106.72345016091532
### 實戰(2)
#### 題目:

#### 程式碼:
```
#實戰(2)
import numpy as np
import cv2
import math
from numpy.random import *
from numpy.fft import*
from matplotlib import pyplot as plt
from google.colab import drive
from google.colab.patches import *
drive.mount('/content/drive')
image_1 = cv2.imread("/content/drive/My Drive/Colab Notebooks/imgs/IMG_0120.jpeg",0)
def fourier_spectrum(f):
F = fft2(f)
Fshift = fftshift(F)
mag = np.abs(Fshift)
mag = mag/mag.max()*255.0*100.0
g = np.uint8(np.clip(mag,0,255))
return g
def periodic_noise(f,scale,frequency,angle):
g = f.copy()
nr,nc = f.shape[:2]
fp = np.zeros([nr,nc])
for x in range(nr):
for y in range(nc):
fp[x,y] = pow(-1,x+y) * f[x,y]
F = fft2(fp)
G = F.copy()
magnitude = np.sum(F)*scale
for theta in range(0,360,angle):
u = int(frequency*np.cos(theta*np.pi/180)+nr/2)
v = int(frequency*np.sin(theta*np.pi/180)+nr/2)
G[u,v]=magnitude
gp = ifft2(G)
gp2 = np.zeros([nr,nc])
for x in range(nr):
for y in range(nc):
gp2[x,y]=round(pow(-1,x+y)*np.real(gp[x,y]),0)
g = np.uint8(np.clip(gp2,0,255))
return g
#Picture scale:0.05 frequency:100 angle:45
img_noise = periodic_noise(image_1, 0.05, 100, 45)
img_noise_spectrum = fourier_spectrum(image_1)
images = [image_1,img_noise,img_noise_spectrum]
titles = ['Original','scale:0.05 frequency:100 angle:45','Perodic Noise Spectrum']
plt.figure(figsize=(15,5))
for i in range(3):
plt.subplot(1,3,i+1),plt.imshow(images[i],cmap='gray')
plt.title(titles[i],fontsize=15,color='r')
#Picture scale:0.1 frequency:200 angle:45
img_noise = periodic_noise(image_1, 0.1, 200, 45)
img_noise_spectrum = fourier_spectrum(image_1)
images = [image_1,img_noise,img_noise_spectrum]
titles = ['Original','scale:0.1 frequency:200 angle:45','Perodic Noise Spectrum']
plt.figure(figsize=(15,5))
for i in range(3):
plt.subplot(1,3,i+1),plt.imshow(images[i],cmap='gray')
plt.title(titles[i],fontsize=15,color='r')
plt.tight_layout()
plt.show()
```
#### 輸出結果:


## 簡答題:

1. 第一題
* 均勻雜訊
* 高斯雜訊
* 指數雜訊
* 瑞雷雜訊
* 脈衝雜訊
* 白雜訊
2. 第二題
* g(x,y)=h(x,y)*f(x,y)+n(x,y),h(x,y)表示失真函數,n(x,y)表示雜訊,為卷積
3. 第三題
* 雜訊是在每個像素生成隨機數,與原有的像素值做運算
* 在影像處理上,可以透過加入雜訊,分析圖片的組成,再透過分析出來的結果,將影像優化還原
4. 第四題
* 無法正確找到公式