精华内容
下载资源
问答
  • 文章目录图像频率域增强频率域低通滤波器H(u,v)理想低通滤波器Butterworth低通滤波器指数低通滤波器梯形低通滤波器 图像频率域增强 频率域低通滤波器H(u,v) 理想低通滤波器 由于高频成分包含有大量的边缘信息,...

    图像频率域增强

    在这里插入图片描述

    频率域低通滤波器H(u,v)

    理想低通滤波器

    在这里插入图片描述
    由于高频成分包含有大量的边缘信息,所以采用该滤波器在去噪音的同时会导致边缘信息损失使图像变模糊。

    Butterworth低通滤波器

    在这里插入图片描述

    指数低通滤波器

    在这里插入图片描述

    梯形低通滤波器

    在这里插入图片描述

    展开全文
  • python图像处理——频率域增强

    千次阅读 2019-02-16 10:32:13
    图像在变换加移动中心后,从中间到外面,频率上依次是从低频到高频的, 那么我们如果把中间规定一小部分去掉,是不是相对于把低频信号去掉了呢? 这也就是相当于进行了高通滤波 低通滤波器:把上述模板中的1...

    图像的傅里叶变换:

    		import chardet
    		import numpy as np
    		import cv2 as cv
    		import cv2
    		from PIL import Image
    		import sys
    		from matplotlib import pyplot as plt
    		
    		
    		
    		img = cv2.imread('D:/1/4.jpg',0)
    		f = np.fft.fft2(img)
    		fshift = np.fft.fftshift(f)
    		magnitude_spectrum = 20*np.log(np.abs(fshift))
    		
    		rows, cols = img.shape
    		crow,ccol = int(rows/2) , int(cols/2)
    		fshift[crow-30:crow+30, ccol-30:ccol+30] = 0
    		f_ishift = np.fft.ifftshift(fshift)
    		img_back = np.fft.ifft2(f_ishift)
    		img_back = np.abs(img_back)
    		
    		plt.subplot(221),plt.imshow(img, cmap = 'gray')
    		plt.title('Input Image'), plt.xticks([]), plt.yticks([])
    		plt.subplot(222),plt.imshow(magnitude_spectrum, cmap = 'gray')
    		plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
    		plt.subplot(223),plt.imshow(img_back)   #恢复图像
    		plt.title('Result in JET'), plt.xticks([]), plt.yticks([])
    		plt.subplot(224),plt.imshow(img_back, cmap = 'gray')
    		plt.title('Image after HPF'), plt.xticks([]), plt.yticks([])
    		plt.show()
    
    

    在这里插入图片描述

    图像的噪声处理与去噪:

    		def add_noise(img):
    		    rows,cols,dims=img.shape
    		    for i in range(5000):
    		        x=np.random.randint(0,rows)
    		        y=np.random.randint(0,cols)
    		        img[x,y,:]=1
    		
    		#二值化处理,以128位界
    		def add1_noise(img):
    		    rows,cols=img.shape
    		    for i in range(rows):
    		        for j in range(cols):
    		            if (img[i,j]<=128):
    		                img[i,j]=0
    		            else:
    		                img[i,j]=1
    		
    		# 高斯噪声
    		def GaussieNoisy(image,sigma):
    		    row,col,ch= image.shape
    		    mean = 0
    		    gauss = np.random.normal(mean,sigma,(row,col,ch))
    		    gauss = gauss.reshape(row,col,ch)
    		    noisy = image + gauss
    		    return noisy.astype(np.uint8)
    		
    		#椒盐噪声
    		def spNoisy(image,s_vs_p = 0.5,amount = 0.004):
    		    row,col,ch = image.shape
    		    out = np.copy(image)
    		    num_salt = np.ceil(amount * image.size * s_vs_p)
    		    coords = [np.random.randint(0, i - 1, int(num_salt))  for i in image.shape]
    		    out[coords] = 1
    		    num_pepper = np.ceil(amount* image.size * (1. - s_vs_p))
    		    coords = [np.random.randint(0, i - 1, int(num_pepper)) for i in image.shape]
    		    out[coords] = 0
    		    return out
    		
    		img=np.array(Image.open('D:/1/1.jpg'))
    		plt.figure()
    		plt.subplot(221)
    		plt.title("src_img")
    		plt.imshow(img)
    		plt.axis('off')
    		
    		plt.subplot(222)
    		plt.title("noise_img")
    		add_noise(img)
    		plt.imshow(img)
    		plt.axis('off')
    		
    		# # 图像二值化,像素值大于128的变为1,否则变为0
    		img2=np.array(Image.open('D:/1/1.jpg').convert('L'))
    		plt.subplot(223)
    		plt.title("noise2_img")
    		add1_noise(img2)
    		plt.imshow(img2)
    		plt.axis('off')
    		
    		plt.subplot(224)
    		plt.title("GaussieNoisy")
    		img3=np.array(Image.open('D:/1/1.jpg'))
    		plt.imshow(GaussieNoisy(img3,25))
    		plt.axis('off')
    		plt.show()
    

    在这里插入图片描述

    傅里叶变换与逆变换:

    		# 傅里叶变换:
    		#       傅里叶变换将低频信号放在了边缘,高频信号放在了中间,然而一副图像,
    		#       很明显的低频信号多而明显,所以讲低频信号移至中心
    		
    		img = cv2.imread('D:/1/4.jpg',0)
    		f = np.fft.fft2(img)
    		fshift = np.fft.fftshift(f)#将频谱对称轴从左上角移至中心
    		# #对于负数可以求角度:
    		# # ph_f=np.angle(f)
    		# # ph_fshift = np.angle(fshift)
    		#取绝对值:将复数变化成实数
    		#取对数的目的为了将数据变化到较小的范围(比如0-255)
    		s1 = np.log(np.abs(f))
    		s2 = np.log(np.abs(fshift))
    		plt.subplot(221),plt.imshow(img,'gray'),plt.title('original')
    		plt.xticks([]), plt.yticks([])
    		plt.subplot(222),plt.imshow(s2,'gray'),plt.title('center')
    		plt.xticks([]), plt.yticks([])
    		f1shift = np.fft.ifftshift(fshift)# 逆变换
    		img_back = np.fft.ifft2(f1shift)
    		img_back = np.abs(img_back)#出来的是复数,无法显示,求绝对值
    		plt.subplot(223),plt.imshow(img_back,'gray'),plt.title('img back')
    		plt.xticks([]), plt.yticks([])
    		plt.show()
    

    在这里插入图片描述

    傅里叶变换进行滤波:

    傅里叶变换实现高通录滤波:
    图像在变换加移动中心后,从中间到外面,频率上依次是从低频到高频的,
    那么我们如果把中间规定一小部分去掉,是不是相对于把低频信号去掉了呢?
    这也就是相当于进行了高通滤波

    低通滤波器:把上述模板中的1变成0,0变成1

    			def lowPassFilter(image, d):
    		    f = np.fft.fft2(image)
    		    fshift = np.fft.fftshift(f)
    		    def make_transform_matrix(d):
    		        transfor_matrix = np.zeros(image.shape)
    		        center_point = tuple(map(lambda x: (x - 1) / 2, s1.shape))
    		        for i in range(transfor_matrix.shape[0]):
    		            for j in range(transfor_matrix.shape[1]):
    		                def cal_distance(pa, pb):
    		                    from math import sqrt
    		                    dis = sqrt((pa[0] - pb[0]) ** 2 + (pa[1] - pb[1]) ** 2)
    		                    return dis
    		                dis = cal_distance(center_point, (i, j))
    		                if dis <= d:
    		                    transfor_matrix[i, j] = 1
    		                else:
    		                    transfor_matrix[i, j] = 0
    		        return transfor_matrix
    		
    		    d_matrix = make_transform_matrix(d)
    		    new_img = np.abs(np.fft.ifft2(np.fft.ifftshift(fshift * d_matrix)))
    		    return new_img
    		
    		def highPassFilter(image,d):
    		    f = np.fft.fft2(image)
    		    fshift = np.fft.fftshift(f)
    		    def make_transform_matrix(d):
    		        transfor_matrix = np.zeros(image.shape)
    		        center_point = tuple(map(lambda x:(x-1)/2,s1.shape))
    		        for i in range(transfor_matrix.shape[0]):
    		            for j in range(transfor_matrix.shape[1]):
    		                def cal_distance(pa,pb):
    		                    from math import sqrt
    		                    dis = sqrt((pa[0]-pb[0])**2+(pa[1]-pb[1])**2)
    		                    return dis
    		                dis = cal_distance(center_point,(i,j))
    		                if dis <= d:
    		                    transfor_matrix[i,j]=0
    		                else:
    		                    transfor_matrix[i,j]=1
    		        return transfor_matrix
    		    d_matrix = make_transform_matrix(d)
    		    new_img = np.abs(np.fft.ifft2(np.fft.ifftshift(fshift*d_matrix)))
    		    return new_img
    		
    		img = cv2.imread('D:/1/5.jpg',0)
    		plt.figure()
    		plt.subplot(221)
    		plt.imshow(img,cmap="gray")
    		plt.axis("off")
    		plt.title('gray')
    		
    		
    		f = np.fft.fft2(img)
    		fshift = np.fft.fftshift(f)
    		s1 = np.log(np.abs(fshift))
    		plt.subplot(222)
    		plt.imshow(s1,'gray')
    		plt.axis("off")
    		plt.title('Frequency Domain')
    		
    		plt.subplot(223)
    		plt.imshow(lowPassFilter(img,100),cmap="gray")
    		plt.axis("off")
    		plt.title('lowPassFilter')
    		
    		
    		plt.subplot(224)
    		plt.imshow(highPassFilter(img,50),cmap="gray")
    		plt.axis("off")
    		plt.title('highPassFilter')
    		plt.show()
    			
    

    在这里插入图片描述

    图像噪声与去噪算法

    中值滤波
    概述: 中值滤波是一种非线性空间滤波器, 它的响应基于图像滤波器包围的图像区域中像素的统计排序,
    然后由统计排序结果的值代替中心像素的值.中值滤波器将其像素邻域内的灰度中值代替代替该像素的值. 中值滤波器的使用非常普遍,
    这是因为对于一定类型的随机噪声, 它提供了一种优秀的去噪能力,比小尺寸的均值滤波器模糊程度明显要低. 中值滤波器对处理脉冲噪声(也称椒盐噪声)非常有效,
    因为该噪声是以黑白点叠加在图像上面的.

    均值滤波
    概述: 均值滤波器的输出是包含在滤波掩模领域内像素的简单平均值.
    均值滤波器最常用的目的就是减噪. 然而, 图像边缘也是由图像灰度尖锐变化带来的特性,
    所以均值滤波还是存在不希望的边缘模糊负面效应.

    		# 图片修复程序1(实现水印去除):修复白色区域
    		img = cv2.imread("D:/1/2.jpg")
    		hight, width, depth = img.shape[0:3]
    		# 图片二值化处理,把[240, 240, 240]~[255, 255, 255]以外的颜色变成0
    		thresh = cv2.inRange(img, np.array([240, 240, 240]), np.array([255, 255, 255]))
    		# 创建形状和尺寸的结构元素
    		kernel = np.ones((3, 3), np.uint8)
    		# 扩张待修复区域
    		hi_mask = cv2.dilate(thresh, kernel, iterations=1)
    		specular = cv2.inpaint(img, hi_mask, 5, flags=cv2.INPAINT_TELEA)
    		cv2.namedWindow("Image", 0)
    		cv2.resizeWindow("Image", int(width / 2), int(hight / 2))
    		cv2.imshow("Image", img)
    		cv2.namedWindow("newImage", 0)
    		cv2.resizeWindow("newImage", int(width / 2), int(hight / 2))
    		cv2.imshow("newImage", specular)
    		cv2.waitKey(0)
    		cv2.destroyAllWindows()
    

    在这里插入图片描述

    频域高斯滤波:

    		def GaussianHighFilter(image,d):
    		    f = np.fft.fft2(image)
    		    fshift = np.fft.fftshift(f)
    		    def make_transform_matrix(d):
    		        transfor_matrix = np.zeros(image.shape)
    		        center_point = tuple(map(lambda x:(x-1)/2,s1.shape))
    		        for i in range(transfor_matrix.shape[0]):
    		            for j in range(transfor_matrix.shape[1]):
    		                def cal_distance(pa,pb):
    		                    from math import sqrt
    		                    dis = sqrt((pa[0]-pb[0])**2+(pa[1]-pb[1])**2)
    		                    return dis
    		                dis = cal_distance(center_point,(i,j))
    		                transfor_matrix[i,j] = 1-np.exp(-(dis**2)/(2*(d**2)))
    		        return transfor_matrix
    		    d_matrix = make_transform_matrix(d)
    		    new_img = np.abs(np.fft.ifft2(np.fft.ifftshift(fshift*d_matrix)))
    		    return new_img
    		
    		def GaussianLowFilter(image,d):
    		    f = np.fft.fft2(image)
    		    fshift = np.fft.fftshift(f)
    		    def make_transform_matrix(d):
    		        transfor_matrix = np.zeros(image.shape)
    		        center_point = tuple(map(lambda x:(x-1)/2,s1.shape))
    		        for i in range(transfor_matrix.shape[0]):
    		            for j in range(transfor_matrix.shape[1]):
    		                def cal_distance(pa,pb):
    		                    from math import sqrt
    		                    dis = sqrt((pa[0]-pb[0])**2+(pa[1]-pb[1])**2)
    		                    return dis
    		                dis = cal_distance(center_point,(i,j))
    		                transfor_matrix[i,j] = np.exp(-(dis**2)/(2*(d**2)))
    		        return transfor_matrix
    		    d_matrix = make_transform_matrix(d)
    		    new_img = np.abs(np.fft.ifft2(np.fft.ifftshift(fshift*d_matrix)))
    		    return new_img
    		
    		
    		img = cv2.imread('D:/1/5.jpg',0)
    		f = np.fft.fft2(img)
    		fshift = np.fft.fftshift(f)
    		s1 = np.log(np.abs(fshift))
    		
    		plt.figure()
    		plt.subplot(221)
    		plt.imshow(img,cmap="gray")
    		plt.axis("off")
    		plt.title('gray')
    		
    		plt.subplot(222)
    		plt.axis("off")
    		plt.imshow(GaussianHighFilter(img,10),cmap="gray")
    		plt.title('GaussianHighFilter')
    		
    		
    		plt.subplot(223)
    		plt.axis("off")
    		plt.imshow(GaussianLowFilter(img,50),cmap="gray")
    		plt.title('GaussianLowFilter')
    		
    		plt.show()
    

    在这里插入图片描述

    空间域的高斯滤波

    		def GaussianOperator(roi):
    		    GaussianKernel = np.array([[1,2,1],[2,4,2],[1,2,1]])
    		    result = np.sum(roi*GaussianKernel/16)
    		    return result
    		
    		def GaussianSmooth(image):
    		    new_image = np.zeros(image.shape)
    		    image = cv2.copyMakeBorder(image,1,1,1,1,cv2.BORDER_DEFAULT)
    		    for i in range(1,image.shape[0]-1):
    		        for j in range(1,image.shape[1]-1):
    		            new_image[i-1,j-1] =GaussianOperator(image[i-1:i+2,j-1:j+2])
    		    return new_image.astype(np.uint8)
    		
    		img=cv.imread("D:/1/5.jpg",0)
    		new_apple = GaussianSmooth(img)
    		plt.subplot(121)
    		plt.axis("off")
    		plt.title("origin image")
    		plt.imshow(img,cmap="gray")
    		plt.subplot(122)
    		plt.axis("off")
    		plt.title("Gaussian image")
    		plt.imshow(img,cmap="gray")
    		plt.subplot(122)
    		plt.axis("off")
    		plt.show()
    
    

    在这里插入图片描述

    相关函数说明:

    img[i,:] = im[j,:] # 将第 j 行的数值赋值给第 i 行
    img[:,i] = 100 # 将第 i 列的所有数值设为 100
    img[:100,:50].sum() # 计算前 100 行、前 50 列所有数值的和
    img[50:100,50:100] # 50~100 行,50~100 列(不包括第 100 行和第 100 列)
    img[i].mean() # 第 i 行所有数值的平均值
    img[:,-1] # 最后一列

    展开全文
  • 'gray'),plt.title('img back') plt.xticks([]), plt.yticks([]) plt.show() 傅里叶变换进行滤波: 傅里叶变换实现高通录滤波: 图像在变换加移动中心后,从中间到外面,频率上依次是从低频到高频的, 那么我们如果...

    图像的傅里叶变换:

    import chardet

    import numpy as np

    import cv2 as cv

    import cv2

    from PIL import Image

    import sys

    from matplotlib import pyplot as plt

    img = cv2.imread('D:/1/4.jpg',0)

    f = np.fft.fft2(img)

    fshift = np.fft.fftshift(f)

    magnitude_spectrum = 20*np.log(np.abs(fshift))

    rows, cols = img.shape

    crow,ccol = int(rows/2) , int(cols/2)

    fshift[crow-30:crow+30, ccol-30:ccol+30] = 0

    f_ishift = np.fft.ifftshift(fshift)

    img_back = np.fft.ifft2(f_ishift)

    img_back = np.abs(img_back)

    plt.subplot(221),plt.imshow(img, cmap = 'gray')

    plt.title('Input Image'), plt.xticks([]), plt.yticks([])

    plt.subplot(222),plt.imshow(magnitude_spectrum, cmap = 'gray')

    plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])

    plt.subplot(223),plt.imshow(img_back) #恢复图像

    plt.title('Result in JET'), plt.xticks([]), plt.yticks([])

    plt.subplot(224),plt.imshow(img_back, cmap = 'gray')

    plt.title('Image after HPF'), plt.xticks([]), plt.yticks([])

    plt.show()

    图像的噪声处理与去噪:

    def add_noise(img):

    rows,cols,dims=img.shape

    for i in range(5000):

    x=np.random.randint(0,rows)

    y=np.random.randint(0,cols)

    img[x,y,:]=1

    #二值化处理,以128位界

    def add1_noise(img):

    rows,cols=img.shape

    for i in range(rows):

    for j in range(cols):

    if (img[i,j]<=128):

    img[i,j]=0

    else:

    img[i,j]=1

    # 高斯噪声

    def GaussieNoisy(image,sigma):

    row,col,ch= image.shape

    mean = 0

    gauss = np.random.normal(mean,sigma,(row,col,ch))

    gauss = gauss.reshape(row,col,ch)

    noisy = image + gauss

    return noisy.astype(np.uint8)

    #椒盐噪声

    def spNoisy(image,s_vs_p = 0.5,amount = 0.004):

    row,col,ch = image.shape

    out = np.copy(image)

    num_salt = np.ceil(amount * image.size * s_vs_p)

    coords = [np.random.randint(0, i - 1, int(num_salt)) for i in image.shape]

    out[coords] = 1

    num_pepper = np.ceil(amount* image.size * (1. - s_vs_p))

    coords = [np.random.randint(0, i - 1, int(num_pepper)) for i in image.shape]

    out[coords] = 0

    return out

    img=np.array(Image.open('D:/1/1.jpg'))

    plt.figure()

    plt.subplot(221)

    plt.title("src_img")

    plt.imshow(img)

    plt.axis('off')

    plt.subplot(222)

    plt.title("noise_img")

    add_noise(img)

    plt.imshow(img)

    plt.axis('off')

    # # 图像二值化,像素值大于128的变为1,否则变为0

    img2=np.array(Image.open('D:/1/1.jpg').convert('L'))

    plt.subplot(223)

    plt.title("noise2_img")

    add1_noise(img2)

    plt.imshow(img2)

    plt.axis('off')

    plt.subplot(224)

    plt.title("GaussieNoisy")

    img3=np.array(Image.open('D:/1/1.jpg'))

    plt.imshow(GaussieNoisy(img3,25))

    plt.axis('off')

    plt.show()

    傅里叶变换与逆变换:

    # 傅里叶变换:

    # 傅里叶变换将低频信号放在了边缘,高频信号放在了中间,然而一副图像,

    # 很明显的低频信号多而明显,所以讲低频信号移至中心

    img = cv2.imread('D:/1/4.jpg',0)

    f = np.fft.fft2(img)

    fshift = np.fft.fftshift(f)#将频谱对称轴从左上角移至中心

    # #对于负数可以求角度:

    # # ph_f=np.angle(f)

    # # ph_fshift = np.angle(fshift)

    #取绝对值:将复数变化成实数

    #取对数的目的为了将数据变化到较小的范围(比如0-255)

    s1 = np.log(np.abs(f))

    s2 = np.log(np.abs(fshift))

    plt.subplot(221),plt.imshow(img,'gray'),plt.title('original')

    plt.xticks([]), plt.yticks([])

    plt.subplot(222),plt.imshow(s2,'gray'),plt.title('center')

    plt.xticks([]), plt.yticks([])

    f1shift = np.fft.ifftshift(fshift)# 逆变换

    img_back = np.fft.ifft2(f1shift)

    img_back = np.abs(img_back)#出来的是复数,无法显示,求绝对值

    plt.subplot(223),plt.imshow(img_back,'gray'),plt.title('img back')

    plt.xticks([]), plt.yticks([])

    plt.show()

    傅里叶变换进行滤波:

    傅里叶变换实现高通录滤波:

    图像在变换加移动中心后,从中间到外面,频率上依次是从低频到高频的,

    那么我们如果把中间规定一小部分去掉,是不是相对于把低频信号去掉了呢?

    这也就是相当于进行了高通滤波

    低通滤波器:把上述模板中的1变成0,0变成1

    def lowPassFilter(image, d):

    f = np.fft.fft2(image)

    fshift = np.fft.fftshift(f)

    def make_transform_matrix(d):

    transfor_matrix = np.zeros(image.shape)

    center_point = tuple(map(lambda x: (x - 1) / 2, s1.shape))

    for i in range(transfor_matrix.shape[0]):

    for j in range(transfor_matrix.shape[1]):

    def cal_distance(pa, pb):

    from math import sqrt

    dis = sqrt((pa[0] - pb[0]) ** 2 + (pa[1] - pb[1]) ** 2)

    return dis

    dis = cal_distance(center_point, (i, j))

    if dis <= d:

    transfor_matrix[i, j] = 1

    else:

    transfor_matrix[i, j] = 0

    return transfor_matrix

    d_matrix = make_transform_matrix(d)

    new_img = np.abs(np.fft.ifft2(np.fft.ifftshift(fshift * d_matrix)))

    return new_img

    def highPassFilter(image,d):

    f = np.fft.fft2(image)

    fshift = np.fft.fftshift(f)

    def make_transform_matrix(d):

    transfor_matrix = np.zeros(image.shape)

    center_point = tuple(map(lambda x:(x-1)/2,s1.shape))

    for i in range(transfor_matrix.shape[0]):

    for j in range(transfor_matrix.shape[1]):

    def cal_distance(pa,pb):

    from math import sqrt

    dis = sqrt((pa[0]-pb[0])**2+(pa[1]-pb[1])**2)

    return dis

    dis = cal_distance(center_point,(i,j))

    if dis <= d:

    transfor_matrix[i,j]=0

    else:

    transfor_matrix[i,j]=1

    return transfor_matrix

    d_matrix = make_transform_matrix(d)

    new_img = np.abs(np.fft.ifft2(np.fft.ifftshift(fshift*d_matrix)))

    return new_img

    img = cv2.imread('D:/1/5.jpg',0)

    plt.figure()

    plt.subplot(221)

    plt.imshow(img,cmap="gray")

    plt.axis("off")

    plt.title('gray')

    f = np.fft.fft2(img)

    fshift = np.fft.fftshift(f)

    s1 = np.log(np.abs(fshift))

    plt.subplot(222)

    plt.imshow(s1,'gray')

    plt.axis("off")

    plt.title('Frequency Domain')

    plt.subplot(223)

    plt.imshow(lowPassFilter(img,100),cmap="gray")

    plt.axis("off")

    plt.title('lowPassFilter')

    plt.subplot(224)

    plt.imshow(highPassFilter(img,50),cmap="gray")

    plt.axis("off")

    plt.title('highPassFilter')

    plt.show()

    图像噪声与去噪算法

    中值滤波

    概述: 中值滤波是一种非线性空间滤波器, 它的响应基于图像滤波器包围的图像区域中像素的统计排序,

    然后由统计排序结果的值代替中心像素的值.中值滤波器将其像素邻域内的灰度中值代替代替该像素的值. 中值滤波器的使用非常普遍,

    这是因为对于一定类型的随机噪声, 它提供了一种优秀的去噪能力,比小尺寸的均值滤波器模糊程度明显要低. 中值滤波器对处理脉冲噪声(也称椒盐噪声)非常有效,

    因为该噪声是以黑白点叠加在图像上面的.

    均值滤波

    概述: 均值滤波器的输出是包含在滤波掩模领域内像素的简单平均值.

    均值滤波器最常用的目的就是减噪. 然而, 图像边缘也是由图像灰度尖锐变化带来的特性,

    所以均值滤波还是存在不希望的边缘模糊负面效应.

    # 图片修复程序1(实现水印去除):修复白色区域

    img = cv2.imread("D:/1/2.jpg")

    hight, width, depth = img.shape[0:3]

    # 图片二值化处理,把[240, 240, 240]~[255, 255, 255]以外的颜色变成0

    thresh = cv2.inRange(img, np.array([240, 240, 240]), np.array([255, 255, 255]))

    # 创建形状和尺寸的结构元素

    kernel = np.ones((3, 3), np.uint8)

    # 扩张待修复区域

    hi_mask = cv2.dilate(thresh, kernel, iterations=1)

    specular = cv2.inpaint(img, hi_mask, 5, flags=cv2.INPAINT_TELEA)

    cv2.namedWindow("Image", 0)

    cv2.resizeWindow("Image", int(width / 2), int(hight / 2))

    cv2.imshow("Image", img)

    cv2.namedWindow("newImage", 0)

    cv2.resizeWindow("newImage", int(width / 2), int(hight / 2))

    cv2.imshow("newImage", specular)

    cv2.waitKey(0)

    cv2.destroyAllWindows()

    频域高斯滤波:

    def GaussianHighFilter(image,d):

    f = np.fft.fft2(image)

    fshift = np.fft.fftshift(f)

    def make_transform_matrix(d):

    transfor_matrix = np.zeros(image.shape)

    center_point = tuple(map(lambda x:(x-1)/2,s1.shape))

    for i in range(transfor_matrix.shape[0]):

    for j in range(transfor_matrix.shape[1]):

    def cal_distance(pa,pb):

    from math import sqrt

    dis = sqrt((pa[0]-pb[0])**2+(pa[1]-pb[1])**2)

    return dis

    dis = cal_distance(center_point,(i,j))

    transfor_matrix[i,j] = 1-np.exp(-(dis**2)/(2*(d**2)))

    return transfor_matrix

    d_matrix = make_transform_matrix(d)

    new_img = np.abs(np.fft.ifft2(np.fft.ifftshift(fshift*d_matrix)))

    return new_img

    def GaussianLowFilter(image,d):

    f = np.fft.fft2(image)

    fshift = np.fft.fftshift(f)

    def make_transform_matrix(d):

    transfor_matrix = np.zeros(image.shape)

    center_point = tuple(map(lambda x:(x-1)/2,s1.shape))

    for i in range(transfor_matrix.shape[0]):

    for j in range(transfor_matrix.shape[1]):

    def cal_distance(pa,pb):

    from math import sqrt

    dis = sqrt((pa[0]-pb[0])**2+(pa[1]-pb[1])**2)

    return dis

    dis = cal_distance(center_point,(i,j))

    transfor_matrix[i,j] = np.exp(-(dis**2)/(2*(d**2)))

    return transfor_matrix

    d_matrix = make_transform_matrix(d)

    new_img = np.abs(np.fft.ifft2(np.fft.ifftshift(fshift*d_matrix)))

    return new_img

    img = cv2.imread('D:/1/5.jpg',0)

    f = np.fft.fft2(img)

    fshift = np.fft.fftshift(f)

    s1 = np.log(np.abs(fshift))

    plt.figure()

    plt.subplot(221)

    plt.imshow(img,cmap="gray")

    plt.axis("off")

    plt.title('gray')

    plt.subplot(222)

    plt.axis("off")

    plt.imshow(GaussianHighFilter(img,10),cmap="gray")

    plt.title('GaussianHighFilter')

    plt.subplot(223)

    plt.axis("off")

    plt.imshow(GaussianLowFilter(img,50),cmap="gray")

    plt.title('GaussianLowFilter')

    plt.show()

    空间域的高斯滤波

    def GaussianOperator(roi):

    GaussianKernel = np.array([[1,2,1],[2,4,2],[1,2,1]])

    result = np.sum(roi*GaussianKernel/16)

    return result

    def GaussianSmooth(image):

    new_image = np.zeros(image.shape)

    image = cv2.copyMakeBorder(image,1,1,1,1,cv2.BORDER_DEFAULT)

    for i in range(1,image.shape[0]-1):

    for j in range(1,image.shape[1]-1):

    new_image[i-1,j-1] =GaussianOperator(image[i-1:i+2,j-1:j+2])

    return new_image.astype(np.uint8)

    img=cv.imread("D:/1/5.jpg",0)

    new_apple = GaussianSmooth(img)

    plt.subplot(121)

    plt.axis("off")

    plt.title("origin image")

    plt.imshow(img,cmap="gray")

    plt.subplot(122)

    plt.axis("off")

    plt.title("Gaussian image")

    plt.imshow(img,cmap="gray")

    plt.subplot(122)

    plt.axis("off")

    plt.show()

    相关函数说明:

    img[i,:] = im[j,:] # 将第 j 行的数值赋值给第 i 行

    img[:,i] = 100 # 将第 i 列的所有数值设为 100

    img[:100,:50].sum() # 计算前 100 行、前 50 列所有数值的和

    img[50:100,50:100] # 50~100 行,50~100 列(不包括第 100 行和第 100 列)

    img[i].mean() # 第 i 行所有数值的平均值

    img[:,-1] # 最后一列

    原文链接:https://blog.csdn.net/linkingfei/article/details/87433352

    展开全文
  • 频率域图像增强

    千次阅读 2018-08-03 17:59:26
    空间域图像增强频率域图像增强是两种截然不同的技术,实际上在相当程度上说它们是在不同的领域做相同的事情,是殊途同归的,,只是有些滤波更适合在空间域完成,而有些则更适合在频率域中完成   2傅里叶变换...
  • 频率域图像增强技术

    2019-09-27 12:38:39
    1、在图像中,像元的灰度值随位置变化的频繁程度可以用频率来表示,这是一种随位置变化的空间频率。 ...是指连续像元的灰度值的最高值与最低值的差。... 滤波是指在图像空间域(x,y)或者频率域...
  • 1 频率域滤波 在频率域中,傅里叶变换可以做到转换过程不丢失任何信息。 2 傅里叶变换 傅里叶级数:满足狄利赫里的正弦函数都可以用正弦函数和余弦函数构成的无穷级数。 傅里叶变换:傅里叶变换在这里不做介绍,数字...
  • 图像增强处理:设计一套空间域与频率域结合的图像增强算法,处理以下任一组图片中的带噪声图像,去除噪声,提高图像质量。 (1)已知:噪声为随机噪声和周期噪声混合噪声; (2)要求: a)去噪处理后,计算均方误差...
  • 为什么要在频率域研究图像增强 1.可以利用频率成分和图像外表之间的对应关系。一些在空间域表述困难的增强任务,在频率域中变得非常普通 2.滤波在频率域更为直观,它可以解释空间域滤波的某些性质 3.可以在频率域...
  • 频率域波图像增强

    千次阅读 2016-12-27 20:32:27
    频率域图像增强 高通滤波器和低通滤波器 本章的典型案例分析 利用频域滤波消除周期噪声 频域滤波基础频域滤波与空域滤波的关系 傅立叶变换可以将图像从空域变换到频域,而傅立叶反变换则可以将图像的频谱逆变换为...
  • 06频率域图像增强

    2020-03-18 17:35:30
    频率域平滑滤波器 思想:边缘和其它尖锐变化(如噪声)在傅立叶变换中对于高频成分,因此平滑可通过衰减图像傅立叶变换的高频成分,保留低频成分来实现。 理想低通滤波器 一个二维的理想低通过滤器( ILPFILPFILPF...
  • 频率域图像增强笔记

    2018-11-02 23:48:49
    图像增强一般是在频域进行,因此将图像从空域变成频域是一个很重要得图像预处理,然后在频域 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑...
  • 频率域图像增强

    千次阅读 2007-12-20 16:57:00
    1频率图像增强的简介1.1背景介绍:在数字图像处理中,图像最直观的理解...在频率下处理的时候,同样的问题用不同的描述方式是和空间域的表示是等价的,但由于描述方式不同了以前空间上很难处理的问题在频率域上就有可
  • 频率域图像增强:以修改图像的傅里叶变换为基础的方法; 高、低通滤波,同态滤波。 另外还有彩色图像的增强。 1.空间域图像增强 1.1基于灰度变换的图像增强 属于点处理技术,这部分内容参考之前的笔记点运算部分...
  • 文章目录频率域图像增强1. 傅里叶变换1.1 一维傅里叶变换总结 频率域图像增强 1. 傅里叶变换 1.1 一维傅里叶变换 单变量连续函数f(x)的傅里叶变换F(u)定义为等式: 反变换可以定义为: 上述这两个式子,就反映了...
  • 频率域图像增强MATLAB实现

    千次阅读 2017-11-23 11:11:02
    1.fft2()函数Y=fft2(X,m,n);...对频谱进行处理(如log压缩舒展处理),在把频谱转换成空间图像。Xf=ifft2(Ys);%傅里叶反变换有意思的交换相位谱% c6s2.m% 读取图片 A = rgb2gray(imresize(imread('G:\0ShiJue\

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 284
精华内容 113
关键字:

频率域增强