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

```
import numpy as np
import cv2
import scipy.special as special
from matplotlib import pyplot as plt
from google.colab import *
from google.colab.patches import *
drive.mount('/content/drive')
image = cv2.imread('/content/drive/My Drive/Colab Notebooks/imgs/Taipei.jpeg',-1)
image1 = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
def beta_correction(f,a=2.0,b=2.0):
g=f.copy()
nr,nc=f.shape[:2]
x=np.linspace(0,1,256)
table = np.round(special.betainc(a,b,x)*255,0)
if f.ndim !=3:
for x in range(nr):
for y in range(nc):
g[x,y]=table[f[x,y]]
else:
for x in range(nr):
for y in range(nc):
for k in range(3):
g[x,y,k]=table[f[x,y,k]]
return g
def image_negative(f):
g = 255 - f
return g
def gamma_correction(f,gamma=2):
g = f.copy()
nr,nc = f.shape[:2]
c = 255/(255**gamma)
table = np.zeros(256)
for i in range(256):
table[i] = round(i**gamma*c,0)
if f.ndim !=3:
for x in range(nr):
for y in range(nc):
g[x,y] = table[f[x,y]]
else:
for x in range(nr):
for y in range(nc):
for k in range(3):
g[x,y,k] = table[f[x,y,k]]
return g
newImage1 = image_negative(image1)
newImage2 = gamma_correction(image1,0.5)
newImage3 = beta_correction(image1,a=0.5,b=0.5)
images = [image1,newImage1,newImage2,newImage3]
titles = ['Original','Negative','Gamma=0.5','Beta=0.5']
plt.figure(figsize=(20,20))
for i in range(4):
plt.subplot(2,2,i+1),plt.imshow(images[i])
plt.title(titles[i],fontsize=20,color='r')
plt.xticks([]),plt.yticks([])
plt.tight_layout()
plt.show()
```
#### 輸出結果:


範例圖片(Taipei)
### 實戰(2)
#### 題目:

```
import numpy as np
import cv2
from matplotlib import pyplot as plt
from google.colab import *
from google.colab.patches import *
image1 = np.array([[0,0,1,1,1,3,3],[0,1,1,1,3,3,3],[1,1,1,3,3,3,6],[1,1,3,3,3,6,6],[1,3,3,3,6,6,6],[3,3,3,6,6,7,7],[3,3,6,6,6,7,7]])
image1 = np.float32(image1) #Make the picture into float32
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
hist1 = histogram(image1)
x = np.arange(0,8)
y = np.array([3,12,0,19,0,0,11,4])
PDF = y/np.sum(y)
CDF = np.cumsum(PDF)
#Histogram
titles=['Original','Histogram','PDF&CDF','Histogram Equalization']
plt.figure(figsize=(15,5))
plt.subplot(131)
plt.title(titles[0],fontsize=15,color='r')
plt.imshow(image1,'gray')
plt.subplot(132)
plt.title(titles[1],fontsize=15,color='r')
plt.plot(hist1)
plt.xlim([0,10])
plt.xlabel('Intensity')
plt.ylabel('#Intensities')
plt.subplot(133)
plt.title(titles[2],fontsize=15,color='r')
plt.plot(x,PDF,marker='o',label='PDF')
plt.plot(x,CDF,marker='o',label='CDF')
plt.xlim(0,7)
plt.ylim(0,1.2)
plt.xlabel("Value")
plt.ylabel("Probability Values")
```
#### 輸出結果:


## 簡答題
#### 題目:

#### 解答:
1.用來完成特定需求,通常是希望增強影像的品質,包括增強對比、去除雜訊......etc,常用的方法:
* 強度轉換
* 直方圖處理
* 影像慮波
2.直方圖的目的是用來統計數位影像中像素強度的分布情形,常用來處理的演算法:
* 機率密度函數(PDF)
* 累積密度函數(CDF)