运用维纳滤波实现图像去模糊(OpenCV实现)

这篇具有很好参考价值的文章主要介绍了运用维纳滤波实现图像去模糊(OpenCV实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、背景描述

二、技术应用

三、实际处理

(1)对运动模糊的处理

处理效果

(2)对均值模糊的处理

处理效果

(3)对高斯模糊的处理

处理效果

(4)对运动模糊+高斯噪声的处理

处理效果 

四、振铃现象

五、总结


一、背景描述

图像去模糊是低级计算机视觉中的一个经典问题,它的目的是从模糊的输入图像中恢复清晰的图像,旨在通过算法和数学模型来减少或消除由于摄像机抖动、物体运动或镜头失真等因素引起的图像模糊。这种技术通常用于提高图像的清晰度和可视化质量,使图像更易于分析、识别或用于其他应用。在摄影、医学成像、天文学、安防监控和计算机视觉等领域,图像去模糊都具有重要的应用价值。

什么是图像模糊呢?通常来说,图像模糊是由拍摄图像过程中的各种因素引起,包括相机抖动、目标运动以及离焦等。根据模糊图片的不同,一般将模糊图片分为如下几类:运动模糊,离焦模糊,高斯模糊,以及混合模糊。

(1)运动模糊(Motion Blur):在光照充足的条件下,当曝光时间足够短时,相机可以捕捉到清晰的图像。但是,当曝光时间相对于物体或者相机运动过长的时候,图像会产生模糊,该模糊图片一般被称为运动模糊。

(2)离焦模糊(Defocus Blur):除了运动模糊之外,图像清晰度还受到目标位置以及相机焦距的影响。在相机的成像区域中,不同目标的景深是不同的,当相机的对焦系统无法对焦到某些目标时,相机就会拍摄到离焦模糊的图片。

(3)高斯模糊(Gaussian Blur):一种常见的模糊方法,它通过对图像进行高斯滤波、高斯卷积来降低图像的高频细节,从而使图像看起来更加平滑。

(4)混合模糊(Mix Blur):当一个图片同时被多种因素影响时,造成的模糊就是混合模糊,比如相机拍摄在离焦状态下的高速运动物体时,得到的模糊就是一种混合模糊。

下面是几种模糊的具体例子:

运用维纳滤波实现图像去模糊(OpenCV实现),图像处理

为了评估去模糊的效果,通常采用一些图片评估算法,这些算法包括基于主观和基于客观的评测。主观方法是不需要清晰图像作参考的,一个具有代表性的指标是 MOS,评测者用 1-5 的等级对图像质量进行评分,之后对分数进行平均。对于图像去模糊的问题,大多数现有方法都是根据基于客观的指标进行评测,该方法可以进一步分为两类:有参考和无参考的指标。有参考的指标通过将恢复的图像与清晰图进行比较来评估图像质量,包括PSNR、SSIM、WSNR、MS-SSIM、IFC、NQM、UIQI、VIT、LPIPS等等,其中PSNR跟SSIM是最常用的指标。与有参考的指标不同,无参考指标仅使用去模糊的图像就可以衡量其质量。常见的指标包括BIQI、BLINDS、BRISQUE、CORNIA、NIQE、SSEQ等。此外,也有人通过测量去模糊算法对不同视觉任务(例如目标检测和识别)准确性的影响,来评估图像去模糊算法的性能。由于我们本次大作业的主要目的是通过我们编写实现图像去模糊方法的教程博客供以后选数字图像处理这门课的同学进行学习,不需要对评估指标进行而外限定,故我们的指标(metric)由我们几个组员从主观上评判图像去模糊后的效果。

由于我们在日常生活中使用手机、相机等电子产品进行拍摄时,我们得到的图片非常容易出现图像模糊的问题,因此寻找能实现图像去模糊的算法或方法对于我们现实世界中的应用这一方面有十分重要的意义。

二、技术应用

在本次实验中,我们主要采用去卷积中的维纳滤波实现图像去模糊。

去卷积领域庞大且复杂,对于运动模糊/PSF模糊/噪声/不同成像领域,用法都不尽相同,本文中总结在点扩散函数PSF(Point Spread Function)模糊的非相干成像领域的去卷积方法。下面介绍一下何为去卷积方法。

在真实世界中理想的镜头时不存在的,例如对于小孔成像,由于光的波动性,如果小孔太小,那么会产生光的衍射,导致成像的模糊,而且信噪比很低,导致图像的噪声较大。而相反,如果小孔太大,同一个像点的光会来自于多个物点,也会导致图像的模糊。所以只有在两者之间某个平衡的尺寸,才能让成像既比较清晰,又具有较低的噪声。真实世界中的成像还有许多方面的不足,因此镜头总是存在一些缺陷会导致一个物点会投影为很多点。一个理想点经过相机后成的像由点扩散函数PSF(Point Spread Function)来描述。当我们考虑镜头只有衍射这一缺陷时,那么一个理想的小点通过圆形光圈后的PSF会呈现出一种特别的形态,这是一种叫做Airy Pattern的图像,这种因为衍射形成的PSF我们称之为衍射极限PSF(Diffraction Limit PSF)。而如果对此PSF做傅里叶变换,就可以得到这个镜头的光学传递函数OTF(Optical Transfer Function)。PSF或OTF,对于成像都有影响,我们以PSF为模糊核C为例:

运用维纳滤波实现图像去模糊(OpenCV实现),图像处理

当我们有实际镜头的成像b,另外还知道了镜头的PSF(即图中的C),如果能找到一种方法实现已知b和c得到X,我们就能实现图像去模糊,而这种方法便是去卷积方法。

对于去卷积方法,可以分为盲去卷积(不知道模糊核)和非盲去卷积(知道模糊核)。本次大作业主要采用的是一种最具有代表性、用的最广的非盲去卷积方法——wiener去卷积法。

在真实世界中,需要考虑噪声的存在,那么我们令n为噪声,则该公式改写成:

运用维纳滤波实现图像去模糊(OpenCV实现),图像处理

空域的卷积对应着频域的乘法,于是:

运用维纳滤波实现图像去模糊(OpenCV实现),图像处理

现在我们可以把去卷积的问题看作是寻找一个频域函数H(ω),它可以使得下面的期望误差最小:

运用维纳滤波实现图像去模糊(OpenCV实现),图像处理

于是问题就转换为:

运用维纳滤波实现图像去模糊(OpenCV实现),图像处理

将B的表达式带入:

运用维纳滤波实现图像去模糊(OpenCV实现),图像处理

展开这个式子有:

运用维纳滤波实现图像去模糊(OpenCV实现),图像处理

这里因为噪声N和图像X不相关,于是

运用维纳滤波实现图像去模糊(OpenCV实现),图像处理

因为噪声均值为0,这样E[XN] = 0

这样我们可以把上面的最小化表达式写作:

运用维纳滤波实现图像去模糊(OpenCV实现),图像处理

对于下面这个lose求梯度:

运用维纳滤波实现图像去模糊(OpenCV实现),图像处理

并设ϑLoss / ϑH=0,那么有

运用维纳滤波实现图像去模糊(OpenCV实现),图像处理

分子分母同时除以运用维纳滤波实现图像去模糊(OpenCV实现),图像处理,就可以得到:

运用维纳滤波实现图像去模糊(OpenCV实现),图像处理

那么维纳滤波就是运用维纳滤波实现图像去模糊(OpenCV实现),图像处理

将C重新写作F(c), B写作F(b), 于是就得到了我们上面介绍过的维纳滤波表达式:

运用维纳滤波实现图像去模糊(OpenCV实现),图像处理

维纳滤波还可以改写成:

运用维纳滤波实现图像去模糊(OpenCV实现),图像处理

G(f))和H(f)是g和h在频率域ff的傅里叶变换

S(f)是输入信号x(t) 的功率谱

N(f)是噪声的n(t) 的功率谱

*代表复数共轭。

滤波过程可以在频率域完成:X^(f)=G(f)*Y(f),这里X^(f)是x^(t)的傅里叶变换,通过逆傅里叶变化可以得到去卷积后的结果 x^(t)。

化简后可得出:

运用维纳滤波实现图像去模糊(OpenCV实现),图像处理

上面我们把问题看做为了一个在频域上的最小化问题,但我们也可以把问题看做是空域上的最小化问题(L2正则化):

运用维纳滤波实现图像去模糊(OpenCV实现),图像处理

我们发现经过正则化后,图片的噪声大幅减少,图像质量更好。

不仅如此,我们还可以使用L1正则化等其它正则化。

运用维纳滤波实现图像去模糊(OpenCV实现),图像处理

运用维纳滤波实现图像去模糊(OpenCV实现),图像处理

运用维纳滤波实现图像去模糊(OpenCV实现),图像处理
原图、L1正则化与L0.8正则化的对比

三、实际处理

(1)对运动模糊的处理

import numpy as np
from numpy.fft import fft2, ifft2
import cv2




#计算得到卷积运动模糊核PSF
def motion_blur(image,image_size, angle, degree):
    image = 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 / degree

    return motion_blur_kernel / motion_blur_kernel.sum()
    '''
    blurred = cv2.filter2D(image, -1, motion_blur_kernel)
    # convert to uint8
    cv2.normalize(blurred, blurred, 0, 255, cv2.NORM_MINMAX)
    blurred = np.array(blurred, dtype=np.uint8)
    return blurred
    '''

#给清晰图片加上卷积模糊核,给图片制造模糊
def apply_blur(input_img, psf, epsilon):
    blurred = cv2.filter2D(input_img, -1, psf)
    # convert to uint8
    cv2.normalize(blurred, blurred, 0, 255, cv2.NORM_MINMAX)
    blurred = np.array(blurred, dtype=np.uint8)
    return blurred

#维纳逆波实现图像去除模糊
def apply_wiener(input_img, psf, epsilon, k=0.001):
    #psf /= np.sum(psf)
    dummy = np.copy(input_img)
    dummy = fft2(dummy)
    psf = fft2(psf, s = input_img.shape)
    psf = np.conj(psf) / (np.abs(psf) ** 2 + k)
    dummy = dummy * psf
    dummy = np.abs(ifft2(dummy))
    return dummy

#数组裁切
def clip_and_cast(array):
    array = np.where(array < 0, 0, array)
    array = np.where(array > 255, 255, array)
    array = array.astype(np.uint8)
    return array

#对运动模糊进行单一通道进行处理
def motion_main_process(input_image):
    motion_blur_channels = []

    img_height, img_width = input_image.shape[:2]
    # 运动模糊模糊核
    motion_blur_psf = motion_blur(input_image,(img_height, img_width), 45, 35)

    motion_blurred_result = np.abs(apply_blur(input_image, motion_blur_psf, 1e-3))

    motion_wiener_result = apply_wiener(motion_blurred_result, motion_blur_psf, 1e-3)

    motion_blur_channels.append((clip_and_cast(motion_blurred_result), clip_and_cast(motion_wiener_result)))

    return motion_blur_channels

if __name__ == '__main__':
    input_image = cv2.imread('lena1960.jpg')
    b_channel, g_channel, r_channel = cv2.split(input_image.copy())

    motion_final_result = []
    for channel in [b_channel, g_channel, r_channel]:
        processed_channel = motion_main_process(channel)
        motion_final_result.append(processed_channel)

    motion_blurred_img = cv2.merge([motion_final_result[0][0][0], motion_final_result[1][0][0], motion_final_result[2][0][0]])

    wiener_deblurred_img = cv2.merge([motion_final_result[0][0][1], motion_final_result[1][0][1], motion_final_result[2][0][1]])

    cv2.imwrite('Motion_Blurred_Image.JPG', motion_blurred_img)
    cv2.imwrite('Wiener_Motion_Image.JPG', wiener_deblurred_img)
处理效果
运用维纳滤波实现图像去模糊(OpenCV实现),图像处理
原图、运动模糊处理图和维纳滤波处理图的对比

(2)对均值模糊的处理

​
import numpy as np
from numpy.fft import fft2, ifft2
import cv2

#计算得到卷积均值模糊核PSF
def mean_blur(kernel_size):
    if kernel_size % 2 == 0:
        kernel_size += 1  # Ensure kernel size is odd

    kernel = np.ones((kernel_size, kernel_size), dtype=np.float32) / kernel_size**2
    PSF =kernel/np.sum(kernel)
    return PSF

#给清晰图片加上卷积模糊核,给图片制造模糊
def apply_blur(input_img, psf, epsilon):
    blurred = cv2.filter2D(input_img, -1, psf)
    # convert to uint8
    cv2.normalize(blurred, blurred, 0, 255, cv2.NORM_MINMAX)
    blurred = np.array(blurred, dtype=np.uint8)
    return blurred


#维纳逆波实现图像去除模糊
def apply_wiener(input_img, psf, epsilon, k=1e-3):
    #psf /= np.sum(psf)
    dummy = np.copy(input_img)
    dummy = fft2(dummy)
    psf = fft2(psf, s = input_img.shape)
    psf = np.conj(psf) / (np.abs(psf) ** 2 + k)
    dummy = dummy * psf
    dummy = np.abs(fft.fftshift(ifft2(dummy)))
    return dummy

#数组裁切
def clip_and_cast(array):
    array = np.where(array < 0, 0, array)
    array = np.where(array > 255, 255, array)
    array = array.astype(np.uint8)
    return array

#对均值模糊进行单一通道进行处理
def mean_main_process(input_image):
    mean_blur_channels = []

    # 均值模糊模糊核
    mean_blur_psf = mean_blur(25)

    mean_blurred_result = np.abs(apply_blur(input_image, mean_blur_psf, 1e-3))

    mean_wiener_result = apply_wiener(mean_blurred_result, mean_blur_psf, 1e-3)

    mean_blur_channels.append((clip_and_cast(mean_blurred_result), clip_and_cast(mean_wiener_result)))

    return mean_blur_channels

if __name__ == '__main__':
    input_image = cv2.imread('lena1960.jpg')
    b_channel, g_channel, r_channel = cv2.split(input_image.copy())

    mean_final_result = []
    for channel in [b_channel, g_channel, r_channel]:
        processed_channel = mean_main_process(channel)
        mean_final_result.append(processed_channel)

    mean_blurred_img = cv2.merge([mean_final_result[0][0][0], mean_final_result[1][0][0], mean_final_result[2][0][0]])

    wiener_deblurred_img = cv2.merge([mean_final_result[0][0][1], mean_final_result[1][0][1], mean_final_result[2][0][1]])

    cv2.imwrite('Motion_Blurred_Image.JPG', mean_blurred_img)
    cv2.imwrite('Wiener_Motion_Image.JPG', wiener_deblurred_img)

​
处理效果
运用维纳滤波实现图像去模糊(OpenCV实现),图像处理
原图、均值模糊处理图和维纳滤波处理图的对比

(3)对高斯模糊的处理

import numpy as np
from numpy.fft import fft2, ifft2
from scipy.signal import gaussian
import cv2




#得到卷积高斯模糊核PSF
def gaussian_kernel(kernel_size ):
	h = gaussian(kernel_size, kernel_size / 3).reshape(kernel_size, 1)
	h = np.dot(h, h.transpose())
	h /= np.sum(h)
	return h

#给清晰图片加上卷积模糊核,给图片制造高斯模糊
def apply_blur(input_img, psf, epsilon):
    blurred = cv2.filter2D(input_img, -1, psf)
    # convert to uint8
    cv2.normalize(blurred, blurred, 0, 255, cv2.NORM_MINMAX)
    blurred = np.array(blurred, dtype=np.uint8)
    return blurred

#维纳逆波实现图像去除模糊
'''
def apply_wiener(input_img, psf, epsilon, k=0.001):
    s = psf.shape
    input_fft = fft.fft2(input_img, s)
    psf_fft = fft.fft2(psf) + epsilon
    psf_fft_1 = np.conj(psf_fft) / (np.abs(psf_fft) ** 2 + k)
    result = fft.ifft2(input_fft * psf_fft_1)
    result = np.abs(fft.fftshift(result))
    return result
'''
def apply_wiener(input_img, psf, epsilon, k=0.001):
    #psf /= np.sum(psf)
    dummy = np.copy(input_img)
    dummy = fft2(dummy)
    psf = fft2(psf, s = input_img.shape)
    psf = np.conj(psf) / (np.abs(psf) ** 2 + k)
    dummy = dummy * psf
    dummy = np.abs(ifft2(dummy))
    return dummy

#数组裁切
def clip_and_cast(array):
    array = np.where(array < 0, 0, array)
    array = np.where(array > 255, 255, array)
    array = array.astype(np.uint8)
    return array


#对高斯模糊进行单一通道进行处理
def gaussian_main_process(input_image):
    gaussian_blur_channels = []

    img_height, img_width = input_image.shape[:2]
    # 高斯模糊模糊核
    gaussian_blur_psf = gaussian_kernel(15)

    gaussian_blurred_result = np.abs(apply_blur(input_image, gaussian_blur_psf, 1e-3))

    new_gaussian_blur_psf = gaussian_kernel(15)
    gaussian_wiener_result = apply_wiener(gaussian_blurred_result, new_gaussian_blur_psf, 1e-3)

    gaussian_blur_channels.append((clip_and_cast(gaussian_blurred_result), clip_and_cast(gaussian_wiener_result)))

    return gaussian_blur_channels


if __name__ == '__main__':
    input_image = cv2.imread('lena1960.jpg')
    b_channel, g_channel, r_channel = cv2.split(input_image.copy())


    gaussian_final_result = []
    for channel in [b_channel, g_channel, r_channel]:
        processed_channel = gaussian_main_process(channel)
        gaussian_final_result.append(processed_channel)

    gaussian_blurred_img = cv2.merge([gaussian_final_result[0][0][0], gaussian_final_result[1][0][0], gaussian_final_result[2][0][0]])

    wiener_deblurred_img = cv2.merge([gaussian_final_result[0][0][1], gaussian_final_result[1][0][1], gaussian_final_result[2][0][1]])

    cv2.imwrite('Gaussian_Blurred_Image.JPG', gaussian_blurred_img)
    cv2.imwrite('Wiener_Deblurred_Image.JPG', wiener_deblurred_img)
处理效果
运用维纳滤波实现图像去模糊(OpenCV实现),图像处理
原图、高斯模糊处理图和维纳滤波处理图的对比

(4)对运动模糊+高斯噪声的处理

import os
import numpy as np
from numpy.fft import fft2, ifft2
from scipy.signal import gaussian, convolve2d
import matplotlib.pyplot as plt
import cv2

#添加运动模糊
def add_motion_blur(img, kernel_size = 3):
	dummy = np.copy(img)
	h = np.eye(kernel_size) / kernel_size
	dummy = convolve2d(dummy, h, mode = 'valid')
	return dummy
#添加高斯噪声
def add_gaussian_niose(img, sigma):
	gauss = np.random.normal(0, sigma, np.shape(img))
	noisy_img = img + gauss
	noisy_img[noisy_img < 0] = 0
	noisy_img[noisy_img > 255] = 255
	return noisy_img

#维纳滤波器
def wiener_filter(img, kernel, K):
	kernel /= np.sum(kernel)
	dummy = np.copy(img)
	dummy = fft2(dummy)
	kernel = fft2(kernel, s = img.shape)
	kernel = np.conj(kernel) / (np.abs(kernel) ** 2 + K)
	dummy = dummy * kernel
	dummy = np.abs(ifft2(dummy))
	return dummy
#高斯核
def gaussian_kernel(kernel_size = 3):
	h = gaussian(kernel_size, kernel_size / 3).reshape(kernel_size, 1)
	h = np.dot(h, h.transpose())
	h /= np.sum(h)
	return h
#如果想将输入的彩色图片转换成灰色图片后进行模糊化和去模糊化,可以在读取图片时使用这个函数
def rgb2gray(rgb):
	return np.dot(rgb[...,:3], [0.2989, 0.5870, 0.1140])


if __name__ == '__main__':
	input_image = cv2.imread('lena1960.jpg')

	# 将图像划分成三通道
	b_channel, g_channel, r_channel = cv2.split(input_image.copy())
	# 在这个循环内给每个通道用 blur(img, kernel_size=15) 添加运动模糊
	motion_blurred_channels = [add_motion_blur(channel, kernel_size=15) for channel in [b_channel, g_channel, r_channel]]
	motion_blurred_img = cv2.merge(motion_blurred_channels)

	# 将经过运动模糊后图像划分成三通道
	mb_channel, mg_channel, mr_channel = cv2.split(motion_blurred_img.copy())
	# 在这个循环内给每个通道用 add_gaussian_noise(img, sigma=20) 添加高斯噪声
	motion_gaussian_blurred_channels = [add_gaussian_niose(channel, sigma=20) for channel in [mb_channel, mg_channel, mr_channel]]
	motion_gaussian_blurred_img = cv2.merge(motion_gaussian_blurred_channels)

	# 保存运动模糊和加入高斯噪声后的运动模糊图像
	cv2.imwrite('Motion_Blurred_Image.JPG', motion_blurred_img)
	cv2.imwrite('Gaussian_Blurred_Image.JPG', motion_gaussian_blurred_img)

	# 使用Wiener滤波器进行运动模糊图像的去模糊
	estimated_kernel = gaussian_kernel(15)  # 估计的模糊核
	motion_filtered_channels = [wiener_filter(channel, estimated_kernel, K=0.01) for channel in motion_blurred_channels]
	motion_filtered_img = cv2.merge(motion_filtered_channels)
	cv2.imwrite('Wiener_Motion_Deblurred_Image.JPG', motion_filtered_img)

	# 使用Wiener滤波器进行高斯模糊图像的去模糊
	new_estimated_kernel = gaussian_kernel(3)  # 估计的模糊核
	motion_gaussian_filtered_channels = [wiener_filter(channel, new_estimated_kernel, K=0.01) for channel in motion_gaussian_blurred_channels]
	motion_gaussian_filtered_img = cv2.merge(motion_gaussian_filtered_channels)
	cv2.imwrite('Wiener_Gaussian_Motion_Deblurred_Image.JPG', motion_gaussian_filtered_img)









处理效果 
运用维纳滤波实现图像去模糊(OpenCV实现),图像处理
原图、运动模糊处理图、高斯噪声处理图、维纳滤波对运动模糊处理图和维纳滤波对高斯噪声处理图的对比

四、振铃现象

图像处理中,对一幅图像进行滤波处理,若选用的频域滤波器具有陡峭的变化,则会使滤波图像产生“振铃”。

产生的可能原因如下:
1) 滤波器噪声振铃En:观测像素中存在不可避免的测量和量化误差。
2) 滤波器偏差振铃Ed:点扩散函数PSF频域响应有零点,正则化过程把一个不适定的问题转换成适定的,导致复原滤波器与原来的PSF的逆卷积的偏差。
3) 边界截断振铃Eb:图像在边界处梯度剧变,对图像做傅里叶变换时,周期延拓导致边界处梯度剧变,引起振铃。

经过网上查资料,发现可以用扩展边界预处理方法(去噪、平滑)可以很好地消除边界振铃。

五、总结

维纳滤波的带通频率依赖于信噪比SNR(f)=S(f)/N(f)。当信噪比趋近于无穷(即噪声为零),G(f)增大,维纳滤波简化成逆滤波;当噪声增加时,信噪比降低,G(f)也会减小。因此,我们可以通过适当调节信噪比的取值,这样有助于提高噪声模糊图像的复原效果。文章来源地址https://www.toymoban.com/news/detail-773460.html

到了这里,关于运用维纳滤波实现图像去模糊(OpenCV实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数字图像处理】灰度图像中添加高斯噪声、椒盐噪声、斑点噪声以及利用不同方法(中值、排序、维纳滤波)去除各种噪声的matlab程序

    图像处理问题描述: 1、图像中分别加入不同方差的高斯噪声、不同噪声密度椒盐噪声和不同方差的斑点噪声(Gaussian noise, salt  pepper noise and speckle noise) 2、分别通过函数medfilt2、ordfilt2和 Wiener 2 去除图像中添加的一些噪声(Gaussian noise, salt  pepper noise and speckle noise)。 各部

    2024年02月07日
    浏览(57)
  • 图像处理--OpenCV实现图像加噪与滤波

    前言: Hello大家好,我是Dream。 今天来学习一下如何使用OpenCV实现图像加噪与滤波,欢迎大家一起参与探讨交流~ 编写一Python程序,要求实现以下功能: 读入一幅图像。 使用两种以上的方法分别向图像中添加噪声。 输出一幅二值图像,图像中未加入噪声的区域为黑色,加入

    2024年02月03日
    浏览(37)
  • OpenCV图像模糊:高斯滤波、双边滤波

    1.高斯滤波原理 图像处理中,高斯滤波主要可以使用两种方法实现。一种是离散化窗口滑窗卷积,另一种方法是通过傅里叶变化。离散化窗口划船卷积时主要利用的是高斯核, 高斯核的大小为奇数 ,因为高斯卷积会在其覆盖区域的中心输出结果。常用的高斯模板有如下几种

    2024年02月07日
    浏览(45)
  • 基于OpenCV的传统视觉应用 -- OpenCV图像处理 图像模糊处理 图像锐化处理

    图像处理是用计算机对图像进行分析,以获取所需结果的过程,又称为影像处理。图像处理一般是指数字图像的处理。数字图像是用工业相机、摄像机、扫描仪等设备经过拍摄得到的一个大的二维数组,该数组的元素称为像素,其值称为灰度值。 均值滤波是指任意一点的像素

    2024年02月07日
    浏览(74)
  • python --opencv图像处理滤波详解(均值滤波、2D 图像卷积、方框滤波、 高斯滤波、中值滤波、双边滤波)

    第一件事情还是先做名词解释,图像平滑到底是个啥? 从字面意思理解貌似图像平滑好像是在说图像滑动。 emmmmmmmmmmmmmmm。。。。 其实半毛钱关系也没有,图像平滑技术通常也被成为图像滤波技术(这个名字看到可能大家会有点感觉)。 每一幅图像都包含某种程度的噪声,

    2024年02月04日
    浏览(64)
  • Python Opencv实践 - 图像高斯滤波(高斯模糊)

         

    2024年02月12日
    浏览(58)
  • 【图像处理OpenCV(C++版)】——5.5 图像平滑之双边滤波

    前言 : 😊😊😊 欢迎来到本博客 😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C++来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快速查询等,随时更新。 😊😊😊 具体食用方式:可以点击本专栏【OpenCV快速查找(更新中)】–搜索你要查询的算子

    2024年02月13日
    浏览(46)
  • 《数字图像处理-OpenCV/Python》连载:空间滤波之高斯滤波器

    本书京东 优惠购书链接 https://item.jd.com/14098452.html 本书CSDN 独家连载专栏 https://blog.csdn.net/youcans/category_12418787.html 图像滤波是指在尽可能保留图像细节特征的条件下对目标图像的噪声进行抑制,是常用的图像处理方法。 空间滤波也称空间域滤波,滤波器规定了邻域形状与邻域

    2024年02月02日
    浏览(59)
  • 【图像处理OpenCV(C++版)】——5.3 图像平滑之均值平滑(滤波)

    前言 : 😊😊😊 欢迎来到本博客 😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C++来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快速查询等,随时更新。 😊😊😊 具体食用方式:可以点击本专栏【OpenCV快速查找(更新中)】–搜索你要查询的算子

    2024年02月04日
    浏览(48)
  • 【图像处理OpenCV(C++版)】——5.4 图像平滑之中值平滑(滤波)

    前言 : 😊😊😊 欢迎来到本博客 😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C++来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快速查询等,随时更新。 😊😊😊 具体食用方式:可以点击本专栏【OpenCV快速查找(更新中)】–搜索你要查询的算子

    2024年02月10日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包