图像 理想低通滤波_图像处理之滤波(下)

05eb1ea0fed6085540675fed73df1da6.png

[toc]目录

一、常规滤波

  • 低通
  • 高通
  • 带通
  • 带阻

二、非局部均值滤波

三、维纳滤波

四、卡尔曼滤波


前言

所谓滤波,其实就是从混合在一起的诸多信号中提取出所需要的信号。

信号的分类:

  • 确定型信号,可以表示为确定的时间函数,可确定其在任何时刻的量值。(具有确定的频谱);一般可通过低通、高通、带通、带阻等模拟滤波器或其他常规滤波算法实现。
  • 随机信号,不能用确定的数学关系式描述,不能预测其未来任何瞬时值,其值的变化服从统计规律。(频谱不确定,功率谱确定);根据有用信号和干扰信号的功率谱设计滤波器——维纳滤波(Wiener Filtering)或卡尔曼滤波(Kalman Filter)。

一、常规滤波

在图像处理或者计算机应用中,在正式对图像爱那个进行分析处理前一般需要一个预处理的过程。预处理是对图像作一些诸如降维、降噪的操作,主要是为后续处理提供一个体积合适、只包含所需信息的图像,通常会用到一些滤波处理手法。滤波,实际上就是信号处理,而图像本身可以看作是一个二维信号,其中像素点灰度的高低代表信号的强弱。对应的高低频的意义:

高频:图像中灰度变化强烈的点,一般是轮廓或者是噪声。

低频:图像中平坦的,灰度变化不大的点,图像中的大部各区域。

而根据图像的高频与低频的特征,可以设计相应的高通和低通滤波器,高通滤波可以检测图像中尖锐、变化明显的地方,而低通滤波可以让图像变得光滑,滤除图像中的噪声、OpenCv中提供的低通滤波有线性的均值滤波器、高斯滤波器,非线性的双边滤波器、中值滤波器;高通滤波有基于Canny,Sobel算子的各种滤波。其实很多时候低通滤波和高通滤波其实是相互矛盾的,很多时候在边缘检测前需要通过低通滤波降噪,这里就需要调节参数在保证高频的边缘不丢失的前提下尽可能多的去处图像的噪点。

这里使用频域的高通和低通滤波。

  • 低通

理想的低通滤波器的模版为:

equation?tex=H%28u%2Cv%29+%3D+%5Cbegin%7Bequation%7D+%5Cleft%5C%7B+%5Cbegin%7Barray%7D%7Blr%7D+1%2C+%5Cquad+D%28u%2C+v%29+%5Cle+D_0+%5C%5C++0%2C+%5Cquad+D%28u%2C+v%29+%5Cge+D_0+%5Cend%7Barray%7D+%5Cright.+%5Cend%7Bequation%7D

其中,

equation?tex=D_0 表示通带半径,
equation?tex=D%28u%2C+v%29 是到频谱中心的距离(欧式距离),计算公式如下:
equation?tex=D%28u%2C+v%29+%3D+%5Csqrt+%7B%28u+-+M%2F+2%29%5E2+%2B+%28v-N%2F2%29%5E2%7D ,M和N表示频谱图像的大小,
equation?tex=%28M%2F2%2C+N%2F2%29 即为频谱中心。
def low_pass_filter(img, radius=100):r = radiusrows, cols = img.shapecenter = int(rows / 2), int(cols / 2)mask = np.zeros((rows, cols, 2), np.uint8)x, y = np.ogrid[:rows, :cols]mask_area = (x - center[0]) ** 2 + (y - center[1]) ** 2 <= r * rmask[mask_area] = 1return mask

Butterworth低通滤波器为:

equation?tex=H%28u%2Cv%29+%3D+%5Cfrac%7B1%7D%7B1%2B%5B%5Cfrac%7BD%28u%2Cv%29%7D%7BD_0%7D%5D%5E%7B2n%7D%7D

fa54ce2927e67de6f636a10054a9b14d.png
def Butterworth(src, d0, n, ftype):template = np.zeros(src.shape, dtype=np.float32)  # 构建滤波器r, c = src.shapefor i in np.arange(r):for j in np.arange(c):distance = np.sqrt((i - r/2)**2 + (j - c/2)**2)template[i, j] = 1/(1 + (distance/d0)**(2*n))  # Butterworth 滤波函数template[i, j] = np.e ** (-1 * (distance**2 / (2 * d0**2)))  # Gaussian滤波函数if ftype == 'high':template = 1 - templatereturn template

高斯低通滤波器:

equation?tex=H%28u%2Cv%29+%3D+e%5E%7B%5Cfrac%7B-D%5E2%28u%2C+v%29%7D%7B2D_0%5E2%7D%7D ,1减去低通滤波器模板即可得到高通滤波器。

e0e88eebeb638494d49c7fd975b593cf.png
# 定义函数,高斯高/低通滤波模板
def Gaussian(src, d0, ftype):template = np.zeros(src.shape, dtype=np.float32)  # 构建滤波器r, c = src.shapefor i in np.arange(r):for j in np.arange(c):distance = np.sqrt((i - r / 2) ** 2 + (j - c / 2) ** 2)template[i, j] = np.e ** (-1 * (distance ** 2 / (2 * d0 ** 2)))  # Gaussian滤波函数if ftype == 'high':template = 1 - templatereturn template
  • 带通
  • 带阻
def bandreject_filters(img, r_out=300, r_in=35):rows, cols = img.shapecrow, ccol = int(rows / 2), int(cols / 2)radius_out = r_outradius_in = r_inmask = np.zeros((rows, cols, 2), np.uint8)center = [crow, ccol]x, y = np.ogrid[:rows, :cols]mask_area = np.logical_and(((x - center[0]) ** 2 + (y - center[1]) ** 2 >= r_in ** 2),((x - center[0]) ** 2 + (y - center[1]) ** 2 <= r_out ** 2))mask[mask_area] = 1mask = 1 - maskreturn mask

二、非局部均值滤波

图像中的像素点之间不是孤立存在的,某一点的像素与别处的像素点一定存在着某种关联,可以概括为灰度相关性和几何结构相似性。

#coding:utf8
import cv2
import numpy as np
def psnr(A, B):return 10*np.log(255*255.0/(((A.astype(np.float)-B)**2).mean()))/np.log(10)def double2uint8(I, ratio=1.0):return np.clip(np.round(I*ratio), 0, 255).astype(np.uint8)def make_kernel(f):kernel = np.zeros((2*f+1, 2*f+1))for d in range(1, f+1):kernel[f-d:f+d+1, f-d:f+d+1] += (1.0/((2*d+1)**2))return kernel/kernel.sum()def NLmeansfilter(I, h_=10, templateWindowSize=5,  searchWindowSize=11):f = templateWindowSize/2t = searchWindowSize/2height, width = I.shape[:2]padLength = t+fI2 = np.pad(I, padLength, 'symmetric')kernel = make_kernel(f)h = (h_**2)I_ = I2[padLength-f:padLength+f+height, padLength-f:padLength+f+width]average = np.zeros(I.shape)sweight = np.zeros(I.shape)wmax =  np.zeros(I.shape)for i in range(-t, t+1):for j in range(-t, t+1):if i==0 and j==0:continueI2_ = I2[padLength+i-f:padLength+i+f+height, padLength+j-f:padLength+j+f+width]w = np.exp(-cv2.filter2D((I2_ - I_)**2, -1, kernel)/h)[f:f+height, f:f+width]sweight += wwmax = np.maximum(wmax, w)average += (w*I2_[f:f+height, f:f+width])return (average+wmax*I)/(sweight+wmax)if __name__ == '__main__':I = cv2.imread('lena.jpg', 0)sigma = 20.0I1 = double2uint8(I + np.random.randn(*I.shape) *sigma)print u'噪声图像PSNR',psnr(I, I1)R1  = cv2.medianBlur(I1, 5)print u'中值滤波PSNR',psnr(I, R1)R2 = cv2.fastNlMeansDenoising(I1, None, sigma, 5, 11)print u'opencv的NLM算法',psnr(I, R2)R3 = double2uint8(NLmeansfilter(I1.astype(np.float), sigma, 5, 11))print u'NLM PSNR',psnr(I, R3)

尽管opencv中已经有实现,对于彩色图像,首先要先转换到CIELAB颜色空间,然后对L和AB成分分别去噪。而且据说上面的实现会比opencv自带的实现要好一些。

cv2.fastNlMeansDenoising() - 使用单个灰度图像
cv2.fastNlMeansDenoisingColored() - 使用彩色图像。
cv2.fastNlMeansDenoisingMulti() - 用于在短时间内捕获的图像序列(灰度图像)
cv2.fastNlMeansDenoisingColoredMulti() - 与上面相同,但用于彩色图像。fastNlMeansDenoisingColored( InputArray src, OutputArray dst,float h = 3, float hColor = 3,int templateWindowSize = 7, int searchWindowSize = 21)
参数:
• h : 决定过滤器强度。h 值高可以很好的去除噪声,但也会把图像的细节抹去。(取 10 的效果不错)
• hForColorComponents : 与 h 相同,但使用与彩色图像。(与 h 相同,10)
• templateWindowSize : 奇数。(推荐值为 7)
• searchWindowSize : 奇数。(推荐值为 21)

三、维纳滤波

对于运动引起的模糊,最简单的方法就是直接作逆滤波,但是逆滤波对于加性噪声特别敏感,使得恢复的图像几乎不可用。最小均方差(维纳)滤波用来去处含有噪声的模糊图像,其目标是找到未污染图像的一个估计,使得他们之间的均方误差最小,可以去除噪声,同时清晰化模糊图像。

主要参考:写的不错,有公式又证明!里面还有约束最小二乘方滤波!

https://blog.csdn.net/wsp_1138886114/article/details/95024180​blog.csdn.net
import matplotlib.pyplot as plt
import numpy as np
from numpy import fft
import math
import cv2# 仿真运动模糊
def motion_process(image_size, motion_angle):PSF = np.zeros(image_size)print(image_size)center_position = (image_size[0] - 1) / 2print(center_position)slope_tan = math.tan(motion_angle * math.pi / 180)slope_cot = 1 / slope_tanif slope_tan <= 1:for i in range(15):offset = round(i * slope_tan)  # ((center_position-i)*slope_tan)PSF[int(center_position + offset), int(center_position - offset)] = 1return PSF / PSF.sum()             # 对点扩散函数进行归一化亮度else:for i in range(15):offset = round(i * slope_cot)PSF[int(center_position - offset), int(center_position + offset)] = 1return PSF / PSF.sum()# 对图片进行运动模糊
def make_blurred(input, PSF, eps):input_fft = fft.fft2(input)             # 进行二维数组的傅里叶变换PSF_fft = fft.fft2(PSF) + epsblurred = fft.ifft2(input_fft * PSF_fft)blurred = np.abs(fft.fftshift(blurred))return blurreddef inverse(input, PSF, eps):                # 逆滤波input_fft = fft.fft2(input)PSF_fft = fft.fft2(PSF) + eps            # 噪声功率,这是已知的,考虑epsilonresult = fft.ifft2(input_fft / PSF_fft)  # 计算F(u,v)的傅里叶反变换result = np.abs(fft.fftshift(result))return resultdef wiener(input, PSF, eps, K=0.01):        # 维纳滤波,K=0.01input_fft = fft.fft2(input)PSF_fft = fft.fft2(PSF) + epsPSF_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 resultdef normal(array):array = np.where(array < 0,  0, array)array = np.where(array > 255, 255, array)array = array.astype(np.int16)return arraydef main(gray):channel = []img_h, img_w = gray.shape[:2]PSF = motion_process((img_h, img_w), 60)      # 进行运动模糊处理blurred = np.abs(make_blurred(gray, PSF, 1e-3))result_blurred = inverse(blurred, PSF, 1e-3)  # 逆滤波result_wiener = wiener(blurred, PSF, 1e-3)    # 维纳滤波blurred_noisy = blurred + 0.1 * blurred.std() * np.random.standard_normal(blurred.shape)  # 添加噪声,standard_normal产生随机的函数inverse_mo2no = inverse(blurred_noisy, PSF, 0.1 + 1e-3)   # 对添加噪声的图像进行逆滤波wiener_mo2no = wiener(blurred_noisy, PSF, 0.1 + 1e-3)     # 对添加噪声的图像进行维纳滤波channel.append((normal(blurred),normal(result_blurred),normal(result_wiener),normal(blurred_noisy),normal(inverse_mo2no),normal(wiener_mo2no)))return channelif __name__ == '__main__':image = cv2.imread('./gggg/001.png')b_gray, g_gray, r_gray = cv2.split(image.copy())Result = []for gray in [b_gray, g_gray, r_gray]:channel = main(gray)Result.append(channel)blurred = cv2.merge([Result[0][0][0], Result[1][0][0], Result[2][0][0]])result_blurred = cv2.merge([Result[0][0][1], Result[1][0][1], Result[2][0][1]])result_wiener = cv2.merge([Result[0][0][2], Result[1][0][2], Result[2][0][2]])blurred_noisy = cv2.merge([Result[0][0][3], Result[1][0][3], Result[2][0][3]])inverse_mo2no = cv2.merge([Result[0][0][4], Result[1][0][4], Result[2][0][4]])wiener_mo2no = cv2.merge([Result[0][0][5],  Result[1][0][5], Result[2][0][5]])#========= 可视化 ==========plt.figure(1)plt.xlabel("Original Image")plt.imshow(np.flip(image, axis=2))                         # 显示原图像plt.figure(2)plt.figure(figsize=(8, 6.5))imgNames = {"Motion blurred":blurred,"inverse deblurred":result_blurred,"wiener deblurred(k=0.01)":result_wiener,"motion & noisy blurred":blurred_noisy,"inverse_mo2no":inverse_mo2no,'wiener_mo2no':wiener_mo2no}for i,(key,imgName) in enumerate(imgNames.items()):plt.subplot(231+i)plt.xlabel(key)plt.imshow(np.flip(imgName, axis=2))plt.show()
OpenCV-Python 图像去模糊(维纳滤波,约束最小二乘方滤波)import matplotlib.pyplot as plt
import numpy as np
from numpy import fft
import math
import cv2# 仿真运动模糊
def motion_process(image_size, motion_angle):PSF = np.zeros(image_size)print(image_size)center_position = (image_size[0] - 1) / 2print(center_position)slope_tan = math.tan(motion_angle * math.pi / 180)slope_cot = 1 / slope_tanif slope_tan <= 1:for i in range(15):offset = round(i * slope_tan)  # ((center_position-i)*slope_tan)PSF[int(center_position + offset), int(center_position - offset)] = 1return PSF / PSF.sum()             # 对点扩散函数进行归一化亮度else:for i in range(15):offset = round(i * slope_cot)PSF[int(center_position - offset), int(center_position + offset)] = 1return PSF / PSF.sum()# 对图片进行运动模糊
def make_blurred(input, PSF, eps):input_fft = fft.fft2(input)             # 进行二维数组的傅里叶变换PSF_fft = fft.fft2(PSF) + epsblurred = fft.ifft2(input_fft * PSF_fft)blurred = np.abs(fft.fftshift(blurred))return blurreddef inverse(input, PSF, eps):                # 逆滤波input_fft = fft.fft2(input)PSF_fft = fft.fft2(PSF) + eps            # 噪声功率,这是已知的,考虑epsilonresult = fft.ifft2(input_fft / PSF_fft)  # 计算F(u,v)的傅里叶反变换result = np.abs(fft.fftshift(result))return resultdef wiener(input, PSF, eps, K=0.01):        # 维纳滤波,K=0.01input_fft = fft.fft2(input)PSF_fft = fft.fft2(PSF) + epsPSF_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 resultdef normal(array):array = np.where(array < 0,  0, array)array = np.where(array > 255, 255, array)array = array.astype(np.int16)return arraydef main(gray):channel = []img_h, img_w = gray.shape[:2]PSF = motion_process((img_h, img_w), 60)      # 进行运动模糊处理blurred = np.abs(make_blurred(gray, PSF, 1e-3))result_blurred = inverse(blurred, PSF, 1e-3)  # 逆滤波result_wiener = wiener(blurred, PSF, 1e-3)    # 维纳滤波blurred_noisy = blurred + 0.1 * blurred.std() * np.random.standard_normal(blurred.shape)  # 添加噪声,standard_normal产生随机的函数inverse_mo2no = inverse(blurred_noisy, PSF, 0.1 + 1e-3)   # 对添加噪声的图像进行逆滤波wiener_mo2no = wiener(blurred_noisy, PSF, 0.1 + 1e-3)     # 对添加噪声的图像进行维纳滤波channel.append((normal(blurred),normal(result_blurred),normal(result_wiener),normal(blurred_noisy),normal(inverse_mo2no),normal(wiener_mo2no)))return channelif __name__ == '__main__':image = cv2.imread('./gggg/001.png')b_gray, g_gray, r_gray = cv2.split(image.copy())Result = []for gray in [b_gray, g_gray, r_gray]:channel = main(gray)Result.append(channel)blurred = cv2.merge([Result[0][0][0], Result[1][0][0], Result[2][0][0]])result_blurred = cv2.merge([Result[0][0][1], Result[1][0][1], Result[2][0][1]])result_wiener = cv2.merge([Result[0][0][2], Result[1][0][2], Result[2][0][2]])blurred_noisy = cv2.merge([Result[0][0][3], Result[1][0][3], Result[2][0][3]])inverse_mo2no = cv2.merge([Result[0][0][4], Result[1][0][4], Result[2][0][4]])wiener_mo2no = cv2.merge([Result[0][0][5],  Result[1][0][5], Result[2][0][5]])#========= 可视化 ==========plt.figure(1)plt.xlabel("Original Image")plt.imshow(np.flip(image, axis=2))                         # 显示原图像plt.figure(2)plt.figure(figsize=(8, 6.5))imgNames = {"Motion blurred":blurred,"inverse deblurred":result_blurred,"wiener deblurred(k=0.01)":result_wiener,"motion & noisy blurred":blurred_noisy,"inverse_mo2no":inverse_mo2no,'wiener_mo2no':wiener_mo2no}for i,(key,imgName) in enumerate(imgNames.items()):plt.subplot(231+i)plt.xlabel(key)plt.imshow(np.flip(imgName, axis=2))plt.show()

四、卡尔曼滤波

Kalman filtering是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。Kalman滤波在测量方差已知的情况下能够从一系列存在测量噪声的数据中,估计动态系统的状态。A Kalman filter is an optimal estimation algorithm. (最优化自回归数据数据算法)

这都是百度百科的东西,搞得跟数学书上公式定理一样,说的都不是人话!关键是字我都认识,但我没懂什么意思。

1.1 是什么?

举个例子:在海图作业中,航海张通常以前一时刻的船位为基准,根据航向、船速和海流等一系列因素推算下一个船位,这个称之为观测船位;另外还会选择适当的方法,通过仪器得到另一个推算船位,这个称之为推算船位;观测船位和推算船位一般都不重合,航海长需要通过分析和判断选择一个可靠的船位,作为船舰当前的位置。

由此得出卡尔曼滤波思想:以

equation?tex=K-1 时刻的最有估计
equation?tex=x_%7Bk-1%7D 为准,预测
equation?tex=K 时刻的状态变量
equation?tex=%5Chat+x_%7Bk%2Fk-1%7D ,同时又对该状态进行观测,得到观测变量
equation?tex=z_k ,再在预测与预测之间进行分析,或者说是以观测量对预测量进行修正,从而得到
equation?tex=K 时刻的最有状态估计
equation?tex=x_k

卡尔曼滤波算法在控制领域有着极广泛的应用,比如自动驾驶汽车,想象一下,一个雷达传感器告诉你另一辆车距离15米,一个激光传感器说车辆距离20米 ,那么如何协调这些传感器测量。再比如,在发动机燃油喷射控制中,可以应用扩展的卡尔曼滤波理论研究瞬态工况下发动机循环进气量的最有估计算法;在雷达中,人们最感兴趣的是跟踪目标,但目标的位置、速度、加速度的测量往往在任何时候都有噪声,而卡尔曼滤波则是利用目标的动态信息,设法去除噪声,得到一个关于目标位置的最好估计。

1.2 怎么回事?

再举个例子:假设要研究一个房间的温度,以一分钟位时间单位,根据经验判断,这个房间的温度是恒定的,但是对于我们的经验不是完全相信,可能存在上下几度的偏差,我们把该偏差看作是高斯白噪声。另外,在房间里放一个温度计,而温度计也不准确,测量值会与实际值存在偏差,我们也把这偏差看作是高斯白噪声。那么现在,我们要根据经验温度和温度计的测量值以及他们各自的噪声来估算出放房间的实际温度。

那么接下来该如何解决呢? 假如我们要估算

equation?tex=k 时刻的实际温度,首先要根据
equation?tex=k-1 时刻的温度值,来预测
equation?tex=k 时刻的温度(
equation?tex=K 时刻的经验温度)。因为我们的经验认为温度是恒定的,所以会得到
equation?tex=k 时刻的温度和
equation?tex=k-1 时刻是一样的,假设是23度,同时该值(预测值)的高斯白噪声为5度,(5是这样得到的。如果k-1时刻估算出的最优温度值的偏差是3,对自己预测的不确定度是4度,他们平方相加再开方,就是5),而温度计得到的温度值为25度,同时该值的偏差为4,此时,对于K时刻房间的温度值有两个:估计值23度和测量值25度,那么究竟相信谁?用均方根误差判断,
equation?tex=H%5E2+%3D+%5Cfrac%7B5%5E2%7D%7B5%5E2+%2B+4%5E2%7D+%5CRightarrow+H+%3D+0.78

所以估计K时刻最优温度值为

equation?tex=23%2B0.78%2A%2825-23%29%3D24.56 度,得到了K时刻的最优温度,下一步就是对K+1时刻的温度值进行最优估算,需要K时刻的最优温度的偏差,
equation?tex=%5Csqrt+%7B%281-H%29+%2A5%5E2%7D+%3D+2.35

fd8a67d6e9b2e5b6eb4c68c0b54fbd9c.png

e7cd62d2b0759bf24353fc2e85bd68be.png
无控制离散型卡尔曼滤波基本方程

ccf57598e97f0ea3494a680b861b0811.png

112f38093ea4eb43df1adc057297a630.png
带有控制的离散型卡尔曼滤波基本方程

详情参照:[卡尔曼滤波器分类及其基本公式](卡尔曼滤波器分类及基本公式 - 百度文库)

就这样,卡尔曼滤波就能不断吧均方误差递归,从而估算出最优的温度值,运行速度快,且只保留上一时刻的协方差。

总而言之,Kalman滤波用在当测量值与模型预测值均不准确的情况下,用来计算预测真值的一种滤波算法,在目标识别与追踪任务中经常用到。

1.3 python代码实现

def KalmanFilter(z, n_iter=20):# 这里是假设A=1,H=1的情况# intial parameterssz = (n_iter,)  # size of array# Q = 1e-5 # process varianceQ = 1e-6  # process variance# allocate space for arraysxhat = numpy.zeros(sz)  # a posteri estimate of xP = numpy.zeros(sz)  # a posteri error estimatexhatminus = numpy.zeros(sz)  # a priori estimate of xPminus = numpy.zeros(sz)  # a priori error estimateK = numpy.zeros(sz)  # gain or blending factorR = 0.1 ** 2  # estimate of measurement variance, change to see effect# intial guessesxhat[0] = 0.0P[0] = 1.0A = 1H = 1for k in range(1, n_iter):# time updatexhatminus[k] = A * xhat[k - 1]  # X(k|k-1) = AX(k-1|k-1) + BU(k) + W(k),A=1,BU(k) = 0Pminus[k] = A * P[k - 1] + Q  # P(k|k-1) = AP(k-1|k-1)A' + Q(k) ,A=1# measurement updateK[k] = Pminus[k] / (Pminus[k] + R)  # Kg(k)=P(k|k-1)H'/[HP(k|k-1)H' + R],H=1xhat[k] = xhatminus[k] + K[k] * (z[k] - H * xhatminus[k])  # X(k|k) = X(k|k-1) + Kg(k)[Z(k) - HX(k|k-1)], H=1P[k] = (1 - K[k] * H) * Pminus[k]  # P(k|k) = (1 - Kg(k)H)P(k|k-1), H=1return xhat

每日一句毒鸡汤:

牛逼的算法往往都是来源一个很简单的思想所演化出来的!

继续坚持!加油~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

泰山行宫碧霞元君祠_临清市泰山行宫碧霞元君祠5月4号(农历三月三十日)举行大型泰山奶奶接驾法会...

临清是泰山奶奶的娘家&#xff0c;每年的四月泰山奶奶要回临清省亲临清市道教协会定于2019年农历三月三十(5月4号星期六)于临清桑树园泰山行宫碧霞元君祠举行大型泰山奶奶迎鸾接驾庙会。届时&#xff0c;将有架鼓会、云龙会、狮胞会、钢叉会、高跷会、天音会、彩船会、秧歌会等…

充分条件反过来是必要条件吗_“充分必要条件”引发的现实思考

昨天看了一篇文章是介绍“充分条件和必要条件”&#xff0c;大致就是A能直接推导出B&#xff0c;那A就是B的充分条件。A不一定能推导出B&#xff0c;但是没A一定推导不出B&#xff0c;那A就是B必要条件。举个简单的例子&#xff1a;对你好&#xff08;A&#xff09;与喜欢你&am…

手机游戏降低游戏延迟的软件_怎么降低手机网络延迟(减少网络延迟的5个小技巧)...

在过去的几十年里&#xff0c;用户或开发人员并不担心延迟。在上世纪90年代和本世纪初&#xff0c;个人互联网连接速度要慢得多&#xff0c;因此发送请求和接收响应之间的延迟要远远小于下载完成所需的时间。如今&#xff0c;更高的带宽连接使下载速度更快&#xff0c;因此延迟…

mysql常用的开发软件下载_强烈推荐!14款经典的MySQL客户端软件

【IT168 评论】不用我说&#xff0c;大家都知道MySQL是一个怎么样的数据库。虽然它的命运比较坎坷&#xff0c;但是丝毫没有影响到我们对MySQL的热情。不论是个人程序或者网站&#xff0c;还是企业数据库&#xff0c;MySQL的身影无处不在。无论做什么数据库的开发&#xff0c;一…

mysql最大值最小值_mysql最大值,最小值,总和查询与计数查询

1、最大值查询&#xff1a;mysql> select max(score) from 4a;------------| max(score) |------------| 93 |------------1 row in set (0.06 sec)2、最小值查询&#xff1a;mysql> select max(4a.score),min(4inall.score) from 4a,4inall;-------------------…

阿里云 centos mysql_在阿里云的CentOS环境中安装配置MySQL的教程

1 常规错误的yum安装方法&#xff1a;在前文中记述了CentOS 6.5系统中通过yum方式快速地搭建了LNMP环境&#xff0c;那么是否也能在CentOS 7或CentOS 7.1系统中依葫芦画瓢安装MySql5.6.24呢&#xff1f;答案是否定的。[roottypecodes ~]# yum -y install mysql mysql-server my…

mysql文件脱机_SQL数据库的脱机与联机操作

online : 可对数据库进行访问offline&#xff1a;数据库无法使用1、使用查询语句select state_desc from sysdatabases where name 数据库名 2、使用databasepropertyex( database,property)函数select databasepropertyex( 数据库 ,’ status )分离数据库&#xff1a;EXEC…

dockerfile 安装mysql_dockerfile构建mysql镜像

使用dockerfile构建mysql&#xff0c;镜像构建完成后&#xff0c;运行容器后&#xff0c;启动mysql服务总是报错Fatal error: Cant open and lock privilege tables: Table storage engine for db doesnt have this optionmysql安装使用的官方的压缩包mysql-5.7.20-linux-glibc…

ubunt11 安装mysql_ubuntu 11.10安装mysql

1. 安装devadmdevserver:~$ sudo apt-get install mysql-server......The following NEW packages will be installed:libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient16libnet-daemon-perl libplrpc-perl mysql-client-5.1 mysql-client-core-5.1mysql-c…

mysql 取交集 php_mysql 查询结果取交集的方法

本文将详细介绍MySQL中如何实现以SQL查询返回的结果集取交集的实现方法&#xff0c;需要的朋友可以参考1MySQL中如何实现以下SQL查询(SELECT S.NameFROM STUDENT S, TRANSCRIPT TWHERE S.StudId T.StudId AND T.CrsCode CS305)INTERSECT(SELECT S.NameFROM STUDENT S, TRANSC…

mysql极客_极客mysql16

1.MySQL会为每个线程分配一个内存(sort_buffer)用于排序该内存大小为sort_buffer_size1>如果排序的数据量小于sort_buffer_size&#xff0c;排序将会在内存中完成2>如果排序数据量很大&#xff0c;内存中无法存下这么多数据&#xff0c;则会使用磁盘临时文件来辅助排序&a…

mysql触发器生成流水_利用mysql触发器生成流水号

http://blog.csdn.net/bluestream/article/details/5755176利用mysql触发器可以生成如日期(20100721)编号(0001)的流水号,编号每天都会从0001开始计算create table orders(orders_id int(10) primary key,customer_name varchar(100) );--------------------------------------…

linux 测试环境启用jar_Linux下搭建测试环境

一、下载安装包https://pan.baidu.com/s/1h-Nk8HcWKKtqbjrn0J_t1g 457jJDK1.8安装包、Tomcat8安装包本文用的远程连接Linux操作系统的客户端工具为Xshell&#xff0c;相关使用请自行百度二、安装JDK1、先检查该环境是否已经安装过jdk。输入java -version。如果有&#xff0c;…

代码中 密码存储_你还记得浏览器自动存储的密码吗?用js代码恢复一下记忆吧...

哈喽大家好我是无知便是罪专注于收集和分享互联网上不为人知的好东西正常来说我们的手机和浏览器都有一个非常实用的功能就是可以自动的加密存储我们的常用密码了然后呢在我们需要的时候呢它可以自动填入进来非常非常的省时省力不过呢这种功能的我们用久了就很容易忘记自己当初…

mysql查询男生基本情况_MySQL数据库技术与应用:数据查询

**摘要&#xff1a;**数据查询是数据库系统应用的主要内容&#xff0c;也是用户对数据库最频繁、最常见的基本操作请求。数据查询数据查询是数据库系统应用的主要内容&#xff0c;也是用户对数据库最频繁、最常见的基本操作请求。数据查询可以根据用户提供的限定条件&#xff0…

mysql还是mdb2_mysql两种表存储结构myisam和innodb的性能比较测试

MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是IndexedSequential Access Method (有索引的顺序访问方法)的缩写,它是存储记录和文件的标准方法.与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具.MyISAM表格可以被压缩,而且它们支持全文搜索.它们不是事务安全的…

numpy维度交换_如何将2个不同维度的numpy数组相乘

默认情况下&#xff0c;ND数组(例如A)与一维1(B)的乘法是在最后一个轴上执行的&#xff0c;这意味着乘法A * B仅在下有效A.shape[-1] len(B)要在另一个轴上将A与B相乘而不是-1&#xff0c;一种解决方法是在相乘前后交换A的轴&#xff1a;要在轴“ axis”上乘以A和B&#xff0c…

diff算法阮一峰_【重学数据结构与算法(JS)】字符串匹配算法(三)——BM算法

前言文章的一开头&#xff0c;还是要强调下字符串匹配的思路将模式串和主串进行比较从前往后比较从后往前比较2. 匹配时&#xff0c;比较主串和模式串的下一个位置3. 失配时,在模式串中寻找一个合适的位置如果找到&#xff0c;从这个位置开始与主串当前失配位置进行比较如果未找…

远程mysql定时删除数据_mysql定时备份数据库 删除历史文件 将备份数据库传送到另外服务器...

定时备份数据库脚本并压缩删除历史文件1.创建备份脚本vim mysql-backup.sh#!/bin/bashbakdate %y-%m-%d-%Htool/usr/local/mysql/bin/mysqldump$tool -uroot -p密码 --lock-all-tables --all-databases | gzip > /路径/$bak\.sql.gzfind 路径 -name "name_*.sql.gz&q…

python input 拖入路径 去除转义 空格_python学习笔记(基础-2)(转载)

1.输出用print()在括号中加上字符串&#xff0c;就可以向屏幕上输出指定的文字。2.输入如果要让用户从电脑输入一些字符怎么办&#xff1f;Python提供了一个input()&#xff0c;可以让用户输入字符串&#xff0c;并存放到一个变量里。输入是Input&#xff0c;输出是Output&…