python图像处理

1.直方图均衡

显示直方图

plt.hist(im.flatten(),128)
#基于CV2的直方图均衡,返回图像
def Histo(imagePath):
    image = cv2.imread(imagePath)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    eq = cv2.equalizeHist(gray)
    return eq

函数输入路径,输出图像,使用cv2.imshow("imgName",im)的方式显示

使用cv2.imshow()后要使用cv2.waitKey()函数保持图像。否则会卡死。

2.高斯模糊(滤波)

from scipy.ndimage import filters
im=array(Image.open(r'D:\xxxx\xxx').convert('L'))
im2=filters.gaussian_filter(im,5)
#5为δ,高斯函数的参数,越大越模糊

3.获取边缘

import math
#im2为灰度图
plt.figure()
plt.gray()
plt.contour(im2,origin='image')
plt.show()

4.x导数,y导数,梯度求导

from PIL import Image
import cv2 
import numpy  
import argparse 
from scipy.ndimage import filters
import math
import matplotlib.pyplot as plt
from scipy.ndimage import filters
#x方向求导
def imx(im, sigma):
    imgx = numpy.zeros(im.shape)
    filters.gaussian_filter(im, sigma, (0, 1), imgx)
    return imgx
 
#y方向求导
def imy(im, sigma):
    imgy = numpy.zeros(im.shape)
    filters.gaussian_filter(im, sigma, (1, 0), imgy)
    return imgy
 
#梯度求导
def mag(im, sigma):
    # there's also gaussian_gradient_magnitude()
    #mag = numpy.sqrt(imgx**2 + imgy**2)
    imgmag = 255 - numpy.sqrt(imgx ** 2 + imgy ** 2)
    return imgmag
  
im = numpy.array(Image.open(r'D:/imgs/n01484850_95.JPEG').convert('L'))
plt.figure()
plt.gray()

imgx=imx(im,2)
imgy=imy(im,2)
#梯度求导时应先有imgx和imgy
imgmag=mag(im,2)
plt.subplot(1,3,1)
plt.imshow(imgx)
plt.subplot(1,3,2)
plt.imshow(imgy)
plt.subplot(1,3,3)
plt.imshow(imgmag)
plt.show()

5.ROF去噪

rof函数

from numpy import *
 
def denoise(im,U_init,tolerance=0.1,tau=0.125,tv_weight=100):
    """ 使用A. Chambolle(2005)在公式(11)中的计算步骤实现Rudin-Osher-Fatemi(ROF)去噪模型
    输入:含有噪声的输入图像(灰度图像)、U 的初始值、TV 正则项权值、步长、停业条件
    输出:去噪和去除纹理后的图像、纹理残留"""

    m,n = im.shape # 噪声图像的大小
 
    # 初始化
    U = U_init
    Px = im # 对偶域的x 分量
    Py = im # 对偶域的y 分量
    error = 1
 
    while (error > tolerance):
        Uold = U
 
        # 原始变量的梯度
        GradUx = roll(U,-1,axis=1)-U # 变量U 梯度的x 分量
        GradUy = roll(U,-1,axis=0)-U # 变量U 梯度的y 分量
 
        # 更新对偶变量
        PxNew = Px + (tau/tv_weight)*GradUx
        PyNew = Py + (tau/tv_weight)*GradUy
        NormNew = maximum(1,sqrt(PxNew**2+PyNew**2))
 
        Px = PxNew/NormNew # 更新x 分量(对偶)
        Py = PyNew/NormNew # 更新y 分量(对偶)
 
        # 更新原始变量
        RxPx = roll(Px,1,axis=1) # 对x 分量进行向右x 轴平移
        RyPy = roll(Py,1,axis=0) # 对y 分量进行向右y 轴平移
 
        DivP = (Px-RxPx)+(Py-RyPy) # 对偶域的散度
        U = im + tv_weight*DivP # 更新原始变量
 
        # 更新误差
        error = linalg.norm(U-Uold)/sqrt(n*m);
        return U,im-U # 去噪后的图像和纹理残余

2.对灰度图像去噪

im = numpy.array(Image.open(r'C:\Users\feiyu\Desktop\tmy.jpg').convert('L'))
U,T = A.denoise(im,im)
plt.figure()
plt.gray()
plt.imshow(U)
plt.show()

去噪后的测试灰度图像

去噪后的灰度图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值