门户网站开发解决方案福田公司门口
news/
2025/9/25 16:17:02/
文章来源:
门户网站开发解决方案,福田公司门口,网站地址英文,建设网站需要准备什么手续标题线性位置不变退化估计退化函数采用观察法估计退化函数采用试验法估计退化函数采用建模法估计退化函数运动模糊函数OpenCV Motion Blur在这一节中#xff0c;得到的结果#xff0c;有些不是很好#xff0c;我需要再努力多找资料#xff0c;重新完成学习#xff0c;如果…
标题线性位置不变退化估计退化函数采用观察法估计退化函数采用试验法估计退化函数采用建模法估计退化函数运动模糊函数OpenCV Motion Blur在这一节中得到的结果有些不是很好我需要再努力多找资料重新完成学习如果大佬有相关资料推荐不胜感激。
线性位置不变退化
# 巴特沃斯带阻陷波滤波器 BNRF
img_temp np.zeros([512, 512])
BNF_1 butterworth_notch_resistant_filter(img_temp, radius20, uk-80, vk60)
BNF_2 butterworth_notch_resistant_filter(img_temp, radius10, uk30, vk80)
BNF_3 butterworth_notch_resistant_filter(img_temp, radius10, uk-30, vk80)plt.figure(figsize(16, 16))
plt.subplot(221), plt.imshow(BNF_1, gray), plt.title(BNF_1)
plt.subplot(222), plt.imshow(BNF_2, gray), plt.title(BNF_2)
plt.subplot(223), plt.imshow(BNF_3, gray), plt.title(BNF_3)BNF_dst BNF_1 * BNF_2 * BNF_3plt.subplot(224), plt.imshow(BNF_dst, gray), plt.title(BNF_dst)plt.tight_layout()
plt.show()估计退化函数
In this section, I think I still got some problem have to sort out, when I have some more time or some more reading.
采用观察法估计退化函数
选择一个信号内容很强的区域如一个高对比度区域表示为g(x,y)g(x, y)g(x,y)令f^(x,y)\hat{f}(x, y)f^(x,y)表示为处理后的子图像则有 Hs(u,v)Gs(u,v)F^s(u,v)(5.66)H_{s}(u, v) \frac{G_{s}(u, v)}{\hat{F}_{s}(u, v)} \tag{5.66}Hs(u,v)F^s(u,v)Gs(u,v)(5.66)
根据位置不变的假设来推断完整的退化函数H(u,v)H(u, v)H(u,v)
采用试验法估计退化函数
一个冲激由一个亮点来模拟这个点应亮到能降低噪声对可忽略值的影响。一个冲激的傅里叶变换是一个常量 H(u,v)G(u,v)A(5.67)H(u, v) \frac{G(u, v)}{A} \tag{5.67}H(u,v)AG(u,v)(5.67)
# 试验法估计退化函数
img_impulse cv2.imread(DIP_Figures/DIP3E_Original_Images_CH05/Fig0524(a)(impulse).tif, 0)
img_blurred cv2.imread(DIP_Figures/DIP3E_Original_Images_CH05/Fig0524(b)(blurred-impulse).tif, 0)fig plt.figure(figsize(10, 5))
plt.subplot(1, 2, 1), plt.imshow(img_impulse, cmapgray), plt.xticks([]), plt.yticks([])
plt.subplot(1, 2, 2), plt.imshow(img_blurred, cmapgray), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()下面两个例子你会看到傅立叶变换后频谱图像的美。把频谱图像上了颜色后更是美极啦
# 傅里叶变换
fp_impulse pad_image(img_impulse)
impluse_cen centralized_2d(fp_impulse)
fft_impulse np.fft.fft2(impluse_cen)
impulse_spectrume np.log(1 spectrum_fft(fft_impulse))fp_blurred pad_image(img_blurred)
blurred_cen centralized_2d(fp_blurred)
fft_blurred np.fft.fft2(blurred_cen)
blurred_spectrum np.log(1 spectrum_fft(fft_blurred))H fft_blurred / fft_impulseh_spectrum np.log(1 spectrum_fft(H))
h_spectrum h_spectrum / h_spectrum.max()fig plt.figure(figsize(15, 5))
plt.subplot(1, 3, 1), plt.imshow(impulse_spectrume, cmapgray), plt.xticks([]), plt.yticks([])
plt.subplot(1, 3, 2), plt.imshow(blurred_spectrum, cmapgray), plt.xticks([]), plt.yticks([])
plt.subplot(1, 3, 3), plt.imshow(h_spectrum, cmapgray), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()# 一些傅里叶变换
img_temp np.zeros([256, 256])
# H butterworth_low_pass_filter(img_temp, 10, 500)
H 1 - butterworth_band_resistant_filter(img_temp, img_temp.shape, radius50, w5, n5)
fp_blurred pad_image(H)
blurred_cen centralized_2d(fp_blurred)
fft_blurred np.fft.fft2(blurred_cen)
blurred_spectrum np.log(1 spectrum_fft(fft_blurred))fig plt.figure(figsize(15, 15))
plt.imshow(blurred_spectrum, cmapPiYG), plt.xticks([]), plt.yticks([])
# plt.savefig(bbrf_4.png, dpi300, quality100)
# plt.subplot(1, 3, 1), plt.imshow(impulse_spectrume, cmapgray), plt.xticks([]), plt.yticks([])
# plt.subplot(1, 3, 2), plt.imshow(blurred_spectrum, cmapgray), plt.xticks([]), plt.yticks([])
# # plt.subplot(1, 3, 3), plt.imshow(h_spectrum, cmapgray), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()采用建模法估计退化函数
H(u,v)e−k(u2v2)56(5.68)H(u,v) e^{-k(u^2 v^2)^{\frac{5}{6}}} \tag{5.68}H(u,v)e−k(u2v2)65(5.68)
关于频率矩形的中心可用如下函数 H(u,v)e−k((u−P/2)2(v−Q/2)2)56H(u, v) e^{-k((u - P/2)^2 (v - Q/2)^2 \ \ )^{\frac{5}{6}}}H(u,v)e−k((u−P/2)2(v−Q/2)2 )65
参加书上P247页运动导的图像模糊的退化过程是否用错 这个问题已经得到解决啦解决方案如下。
def modeling_degrade(img, k1):modeling degradation fuction, math: $$H(u,v) e^{-k(u^2 v^2)^{\frac{5}{6}}}$$param: img: input imgparam: k: N, M img.shape[:2]u np.arange(M)v np.arange(N)u, v np.meshgrid(u, v)temp (u - M//2)**2 (v - N//2)**2kernel np.exp(-k * np.power(temp, 5/6))return kernel# 不填充结果与书上一致啦
def get_degenerate_image(img, img_deg):不填充图像做傅里叶变换后与退化函数做乘积再反傅里叶变换# FFT--------------------------------------------fft np.fft.fft2(img)# FFT * H(u, v)----------------------------------fft_huv fft * img_deg# IFFT-------------------------------------------ifft np.fft.ifft2(fft_huv)return ifftimg_ori cv2.imread(DIP_Figures/DIP3E_Original_Images_CH05/Fig0525(a)(aerial_view_no_turb).tif, 0)# k [1, 0.1, 0.01, 0.001, 0.0025, 0.00025]
k [0.0025, 0.001, 0.00025]fp_cen centralized_2d(img_ori)fig plt.figure(figsize(12, 12))
for i in range(len(k) 1):ax fig.add_subplot(2, 2, i1, xticks[], yticks[])if i 0:ax.imshow(img_ori, gray), ax.set_title(fOriginal)else:img_deg modeling_degrade(fp_cen, kk[i-1])ifft get_degenerate_image(fp_cen, img_deg)img_new centralized_2d(ifft.real)img_new np.clip(img_new, 0, img_new.max())img_new np.uint8(normalize(img_new) * 255)ax.imshow(img_new, gray)ax.set_title(fk {k[i-1]})
plt.tight_layout()
plt.show() 运动模糊函数
H(u,v)Tπ(uavb)sin[π(uavb)]e−jπ(uavb)H(u,v) \frac{T}{\pi(ua vb)}sin[\pi(uavb)]e^{-j\pi(uavb)}H(u,v)π(uavb)Tsin[π(uavb)]e−jπ(uavb)
下面的代码可能比较混乱因为实验过程而得出的结果不太好还没有整理。需要继续学习后再完成整理。
img_ori cv2.imread(DIP_Figures/DIP3E_Original_Images_CH05/Fig0526(a)(original_DIP).tif, 0)def motion_huv(img, a, b, T):eps 1e-8M, N img.shape[1], img.shape[0]u np.arange(1, M1)v np.arange(1, N1)u, v np.meshgrid(u, v)temp np.pi * (u * a v * b)kernel (T * np.sin(temp) * np.exp(-temp*1j) /(temp eps))return kernel# 对图片进行运动模糊
def make_blurred(img, PSF, eps):#
# fft np.fft.fft2(img)
# # fft_shift np.fft.fftshift(fft)# fft_psf fft * PSF# ifft np.fft.ifft2(fft_psf)
# # ifft_shift np.fft.ifftshift(ifft)
# blurred abs(ifft.real)#M, N img.shape[:2]fp pad_image(img, modeconstant)fp_cen centralized_2d(fp)img_fft np.fft.fft2(fp_cen)img_fft_psf img_fft * PSFifft np.fft.ifft2(img_fft_psf)blurred centralized_2d(ifft.real)[:N, :M]
# # blurred ifft.real[:N, :M]return blurreddef get_motion_dsf(image_size, motion_angle, motion_dis):PSF np.zeros(image_size) # 点扩散函数x_center (image_size[0] - 1) / 2y_center (image_size[1] - 1) / 2sin_val np.sin(motion_angle * np.pi / 180)cos_val np.cos(motion_angle * np.pi / 180)# 将对应角度上motion_dis个点置成1for i in range(motion_dis):x_offset round(sin_val * i)y_offset round(cos_val * i)PSF[int(x_center - x_offset), int(y_center y_offset)] 1return PSF / PSF.sum() # 归一化img_motion get_motion_dsf((480, 480), 70, 200)plt.figure(figsize(10, 8))
plt.subplot(121), plt.imshow(img_motion,gray), plt.title(img_motion)
plt.show()OpenCV Motion Blur
def motion_blur(image, degree12, angle45):create motion blur using opencvparam: image: input imageparam: degree: the size of the blurryparam: angle: blur anglereturn uint8 imageimage np.array(image)# 这里生成任意角度的运动模糊kernel的矩阵 degree越大模糊程度越高M cv2.getRotationMatrix2D((degree / 2, degree / 2), angle, 1)motion_blur_kernel np.diag(np.ones(degree))motion_blur_kernel cv2.warpAffine(motion_blur_kernel, M, (degree, degree))motion_blur_kernel motion_blur_kernel / degreeblurred cv2.filter2D(image, -1, motion_blur_kernel)# convert to uint8cv2.normalize(blurred, blurred, 0, 255, cv2.NORM_MINMAX)blurred np.array(blurred, dtypenp.uint8)return blurred# 运动模糊图像
img_ori cv2.imread(DIP_Figures/DIP3E_Original_Images_CH05/Fig0526(a)(original_DIP).tif, 0)img_blur motion_blur(img_ori, degree75, angle15)plt.figure(figsize(12, 8))
plt.subplot(121), plt.imshow(img_ori,gray), plt.title(img_deg)
plt.subplot(122), plt.imshow(img_blur,gray), plt.title(high_pass)
plt.show()
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/917206.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!