生活随笔
收集整理的這篇文章主要介紹了
数字图像处理基础与应用 第四章
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
3-1
(1) 感覺就是圖像模糊了,并沒有去噪
from cv2
import cv2
import numpy
as np
import random
def spNoise(img
,prob
):output
= np
.zeros
(img
.shape
,np
.uint8
)thres
= 1 - prob
for i
in range(img
.shape
[0]):for j
in range(img
.shape
[1]):rdn
= random
.random
()if rdn
< prob
:output
[i
][j
] = 0elif rdn
> thres
:output
[i
][j
] = 255else:output
[i
][j
] = img
[i
][j
]return output
def gaussNoise(img
, mean
=0, var
=0.0001):img
= np
.array
(img
/255, dtype
=float)noise
= np
.random
.normal
(mean
, var
** 0.5, img
.shape
)out
= img
+ noise
if out
.min() < 0:low_clip
= -1.else:low_clip
= 0.out
= np
.clip
(out
, low_clip
, 1.0)out
= np
.uint8
(out
*255)return out
def meanFilter(img
, c
):img_shape
= np
.shape
(img
)out
= np
.zeros
(img_shape
)for i
in range(img_shape
[0]):for j
in range(img_shape
[1]):if i
>= c
and i
< img_shape
[0] - c
and j
>= c
and j
< img_shape
[1] - c
:out
[i
][j
] = min(sum(img
[i
- c
:i
+ c
+ 1, j
- c
:j
+ c
+ 1].flatten
()) // ((2 * c
+ 1) * (2 * c
+ 1)), img
[i
][j
])else:out
[i
][j
] = img
[i
][j
]return out
def medianFilter(img
, c
):img_shape
= np
.shape
(img
)out
= np
.zeros
(img_shape
)for i
in range(img_shape
[0]):for j
in range(img_shape
[1]):if i
>= c
and i
< img_shape
[0] - c
and j
>= c
and j
< img_shape
[1] - c
:out
[i
][j
] = medianValueOdd
(img
[i
- c
:i
+ c
+ 1, j
- c
:j
+ c
+ 1].flatten
())else:out
[i
][j
] = img
[i
][j
]return out
def medianValueOdd(arr
):length
= len(arr
)gap
= length
//2while gap
> 0:for i
in range(gap
, length
):tem
= arr
[i
]j
= i
while j
>= gap
and arr
[j
-gap
] >tem
: arr
[i
], arr
[i
- gap
] = arr
[i
- gap
], arr
[i
]j
-= gap gap
= gap
// 2return arr
[length
//2]img
= cv2
.imread
("C:\\test\\1.jpg")
gray
= cv2
.cvtColor
(img
, cv2
.COLOR_BGR2GRAY
)img_noise
= spNoise
(gray
, 0.0005)
img_noise
= gaussNoise
(img_noise
)img_mean_filter1
= meanFilter
(img_noise
, 1)
img_mean_filter2
= meanFilter
(img_noise
, 2)
img_mean_filter3
= meanFilter
(img_noise
, 3)
img_median_filter1
= medianFilter
(img_noise
, 1)
img_median_filter2
= medianFilter
(img_noise
, 2)
img_median_filter3
= medianFilter
(img_noise
, 3)cv2
.imwrite
("C:\\test\\img_mean_filter1.jpg", img_mean_filter1
)
cv2
.imwrite
("C:\\test\\img_mean_filter2.jpg", img_mean_filter2
)
cv2
.imwrite
("C:\\test\\img_mean_filter3.jpg", img_mean_filter3
)
cv2
.imwrite
("C:\\test\\img_median_filter1.jpg", img_median_filter1
)
cv2
.imwrite
("C:\\test\\img_median_filter2.jpg", img_median_filter2
)
cv2
.imwrite
("C:\\test\\img_median_filter3.jpg", img_median_filter3
)img_mean_filter1
= cv2
.imread
("C:\\test\\img_mean_filter1.jpg")
img_mean_filter2
= cv2
.imread
("C:\\test\\img_mean_filter2.jpg")
img_mean_filter3
= cv2
.imread
("C:\\test\\img_mean_filter3.jpg")
img_median_filter1
= cv2
.imread
("C:\\test\\img_median_filter1.jpg")
img_median_filter2
= cv2
.imread
("C:\\test\\img_median_filter2.jpg")
img_median_filter3
= cv2
.imread
("C:\\test\\img_median_filter3.jpg")cv2
.imshow
('gray', gray
)
cv2
.imshow
('img_noise', img_noise
)
cv2
.imshow
('img_mean_filter1', img_mean_filter1
)
cv2
.imshow
('img_mean_filter2', img_mean_filter2
)
cv2
.imshow
('img_mean_filter3', img_mean_filter3
)
cv2
.imshow
('img_median_filter1', img_median_filter1
)
cv2
.imshow
('img_median_filter2', img_median_filter2
)
cv2
.imshow
('img_median_filter3', img_median_filter3
)
cv2
.waitKey
()
cv2
.destroyAllWindows
4-1
(2)使用K鄰近濾波和對稱鄰近濾波,發現K鄰近濾波時,若僅取K=3,會產生很多早點,取K=5,K=7時,能有效去噪
from cv2
import cv2
import numpy
as np
import random
def spNoise(img
,prob
):output
= np
.zeros
(img
.shape
,np
.uint8
)thres
= 1 - prob
for i
in range(img
.shape
[0]):for j
in range(img
.shape
[1]):rdn
= random
.random
()if rdn
< prob
:output
[i
][j
] = 0elif rdn
> thres
:output
[i
][j
] = 255else:output
[i
][j
] = img
[i
][j
]return output
def gaussNoise(img
, mean
=0, var
=0.0001):img
= np
.array
(img
/255, dtype
=float)noise
= np
.random
.normal
(mean
, var
** 0.5, img
.shape
)out
= img
+ noise
if out
.min() < 0:low_clip
= -1.else:low_clip
= 0.out
= np
.clip
(out
, low_clip
, 1.0)out
= np
.uint8
(out
*255)return out
def shellSort(arr
):length
= len(arr
)gap
= length
//2while gap
> 0:for i
in range(gap
, length
):tem
= arr
[i
]j
= i
while j
>= gap
and arr
[j
-gap
] >tem
: arr
[i
], arr
[i
- gap
] = arr
[i
- gap
], arr
[i
]j
-= gap gap
= gap
// 2return arr
def kNeighborFilter(img
, N
):square
= N
* NK
= 2 * N
- 1q
= N
// 2img_shape
= np
.shape
(img
)out
= np
.zeros
(img_shape
)for i
in range(img_shape
[0]):for j
in range(img_shape
[1]):if i
>= q
and i
< img_shape
[0] - q
and j
>= q
and j
< img_shape
[1] - q
:img_flatten
= img
[i
- q
:i
+ q
+ 1, j
- q
:j
+ q
+ 1].flatten
()arr
= np
.append
(img_flatten
[0:square
// 2], (img_flatten
[square
// 2 + 1:]))arr
= shellSort
(arr
)p
= 0while p
< len(arr
)-1:if arr
[p
] > img
[i
][j
]:breakif arr
[p
] <= img
[i
][j
] and arr
[p
+ 1] >= img
[i
][j
]:breakp
+= 1if p
< K
// 2:out
[i
][j
] = sum(arr
[0:K
]) // K
elif p
> square
- K
// 2:out
[i
][j
] = sum(arr
[square
- K
:]) // K
else:out
[i
][j
] = sum(arr
[p
- K
// 2:p
+ K
// 2 + 1]) // K
else:out
[i
][j
] = img
[i
][j
]return out
def symmetricNeighborFilter(img
, N
):p
= N
// 2img_shape
= np
.shape
(img
)out
= np
.zeros
(img_shape
)for i
in range(img_shape
[0]):for j
in range(img_shape
[1]):if i
>= p
and i
< img_shape
[0] - p
and j
>= p
and j
< img_shape
[1] - p
:tem
= []for k
in range(i
- p
, i
+ p
+ 1):for l
in range(j
- p
, j
):tem
.append
([img
[k
][l
], img
[2 * i
- k
][2 * j
- l
]])for k
in range(i
- p
, i
):tem
.append
([img
[k
, j
], img
[2 * i
- k
][j
]])total
= 0print(tem
)for m
in range(len(tem
)):if abs(tem
[m
][0] - img
[i
][j
]) < abs(tem
[m
][1] - img
[i
][j
]):total
+= tem
[m
][0]else:total
+= tem
[m
][1]print(total
)out
[i
][j
] = total
// len(tem
)print(out
[i
][j
])else:out
[i
][j
] = img
[i
][j
]return outimg
= cv2
.imread
("C:\\test\\1.jpg")
gray
= cv2
.cvtColor
(img
, cv2
.COLOR_BGR2GRAY
)img_noise
= spNoise
(gray
, 0.0005)
img_noise
= gaussNoise
(img_noise
)k_neighbor_filter1
= kNeighborFilter
(img_noise
, 3)
k_neighbor_filter2
= kNeighborFilter
(img_noise
, 5)
k_neighbor_filter3
= kNeighborFilter
(img_noise
, 7)
symmetric_neighbor_filter1
= symmetricNeighborFilter
(img_noise
, 3)
symmetric_neighbor_filter2
= symmetricNeighborFilter
(img_noise
, 5)
symmetric_neighbor_filter3
= symmetricNeighborFilter
(img_noise
, 7)cv2
.imwrite
("C:\\test\\kNeighborFilter3.jpg", k_neighbor_filter1
)
cv2
.imwrite
("C:\\test\\kNeighborFilter5.jpg", k_neighbor_filter2
)
cv2
.imwrite
("C:\\test\\kNeighborFilter7.jpg", k_neighbor_filter3
)
cv2
.imwrite
("C:\\test\\symmetricNeighborFilter3.jpg", symmetric_neighbor_filter1
)
cv2
.imwrite
("C:\\test\\symmetricNeighborFilter5.jpg", symmetric_neighbor_filter2
)
cv2
.imwrite
("C:\\test\\symmetricNeighborFilter7.jpg", symmetric_neighbor_filter3
)k_neighbor_filter1
= cv2
.imread
("C:\\test\\kNeighborFilter3.jpg")
k_neighbor_filter2
= cv2
.imread
("C:\\test\\kNeighborFilter5.jpg")
k_neighbor_filter3
= cv2
.imread
("C:\\test\\kNeighborFilter7.jpg")
symmetric_neighbor_filter1
= cv2
.imread
("C:\\test\\symmetricNeighborFilter3.jpg")
symmetric_neighbor_filter2
= cv2
.imread
("C:\\test\\symmetricNeighborFilter5.jpg")
symmetric_neighbor_filter3
= cv2
.imread
("C:\\test\\symmetricNeighborFilter7.jpg")cv2
.imshow
('gray', gray
)
cv2
.imshow
('img_noise', img_noise
)
cv2
.imshow
('kNeighborFilter3', k_neighbor_filter1
)
cv2
.imshow
('kNeighborFilter5', k_neighbor_filter2
)
cv2
.imshow
('kNeighborFilter7', k_neighbor_filter3
)
cv2
.imshow
('kNeighborFilter3', symmetric_neighbor_filter1
)
cv2
.imshow
('kNeighborFilter5', symmetric_neighbor_filter2
)
cv2
.imshow
('kNeighborFilter7', symmetric_neighbor_filter3
)
cv2
.waitKey
()
cv2
.destroyAllWindows
4-1(3)看起來開運算去掉了白點,閉運算去掉了黑點
from cv2
import cv2
import numpy
as np
import random
def spNoise(img
,prob
):output
= np
.zeros
(img
.shape
,np
.uint8
)thres
= 1 - prob
for i
in range(img
.shape
[0]):for j
in range(img
.shape
[1]):rdn
= random
.random
()if rdn
< prob
:output
[i
][j
] = 0elif rdn
> thres
:output
[i
][j
] = 255else:output
[i
][j
] = img
[i
][j
]return output
def gaussNoise(img
, mean
=0, var
=0.0001):img
= np
.array
(img
/255, dtype
=float)noise
= np
.random
.normal
(mean
, var
** 0.5, img
.shape
)out
= img
+ noise
if out
.min() < 0:low_clip
= -1.else:low_clip
= 0.out
= np
.clip
(out
, low_clip
, 1.0)out
= np
.uint8
(out
*255)return out
def grayErosion(img
, N
):arr
= np
.ones
((N
, N
))p
= N
// 2img_shape
= np
.shape
(img
)out
= np
.zeros
(img_shape
)for i
in range(img_shape
[0]):for j
in range(img_shape
[1]):if i
>= p
and i
< img_shape
[0] - p
and j
>= p
and j
< img_shape
[1] - p
:out
[i
][j
] = max(0, min(img
[i
- p
:i
+ p
+ 1, j
- p
:j
+ p
+ 1].flatten
()-arr
.flatten
()))else:out
[i
][j
] = img
[i
][j
]return out
def grayScale(img
, N
):arr
= np
.ones
((N
, N
))p
= N
// 2img_shape
= np
.shape
(img
)out
= np
.zeros
(img_shape
)for i
in range(img_shape
[0]):for j
in range(img_shape
[1]):if i
>= p
and i
< img_shape
[0] - p
and j
>= p
and j
< img_shape
[1] - p
:out
[i
][j
] = min(255, max(img
[i
- p
:i
+ p
+ 1, j
- p
:j
+ p
+ 1].flatten
()-arr
.flatten
()))else:out
[i
][j
] = img
[i
][j
] return out
def openFilter(img
, arr
):return grayScale
(grayErosion
(img
, arr
), arr
)def closeFilter(img
, arr
):return grayErosion
(grayScale
(img
, arr
), arr
)img
= cv2
.imread
("C:\\test\\1.jpg")
gray
= cv2
.cvtColor
(img
, cv2
.COLOR_BGR2GRAY
)img_noise
= spNoise
(gray
, 0.0005)
img_noise
= gaussNoise
(img_noise
)image_open_filter
= openFilter
(img_noise
, 3)
image_close_filter
= closeFilter
(img_noise
, 3)cv2
.imwrite
("C:\\test\\image_open_filter.jpg", image_open_filter
)
cv2
.imwrite
("C:\\test\\image_close_filter.jpg", image_close_filter
)image_open_filter
= cv2
.imread
("C:\\test\\image_open_filter.jpg")
image_close_filter
= cv2
.imread
("C:\\test\\image_close_filter.jpg")cv2
.imshow
('gray', gray
)
cv2
.imshow
('img_noise', img_noise
)
cv2
.imshow
('image_open_filter', image_open_filter
)
cv2
.imshow
('image_close_filter', image_close_filter
)
cv2
.waitKey
()
cv2
.destroyAllWindows
總結
以上是生活随笔為你收集整理的数字图像处理基础与应用 第四章的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。