代码查询
MATLAB
mat2gray() 归一化处理
img_dst=mat2gray(img_src,[mix,max])
- 将img_src矩阵中位于min-max的值归一化处理[0,1],小于或超出变为0和1
size() 获取图像尺寸
[wid,hei]=size(img_src)
ones() 新建值为1的矩阵
ones(n) %返回n*n值全为1的矩阵
zeros() 新建矩阵
plot=zeros(wid,hei)
- wid,hei:矩阵尺寸
rgb2gray() 转换为灰度图像
img_dst=rgb2gray(img_src)
imhist() 显示直方图
imhist(img_src,n)
- n:灰度等级
histeq() 直方均衡化
img_dst=histeq(img_src,n)
- n:均衡化后灰度等级
randn() 随机数(标准正态分布(0,1))
Y=randn(n) %返回一个n*n随机项的矩阵
Y=randn(m,n) %返回一个m*n随机项的矩阵
Y=randn(m,n,p...) or Y=randn([m,n,p...]) %返回一个随机数组
Y=randn(size(A)) %返回一个和A同样维数的随机数组
Y=randn(1,5);rng(s);Y1=randn(1,5) %会发现Y和Y1的数列是一样的,因为rng(s)是恢复随机数列发生器
我们知道,高斯分布图顶点坐标(μ,σ),而randn(n)是产生标准正态即(0,1),所以我们想产生一个期望μ=a,方差σ^2=b的随机数,只需要:
Y=a+sqrt(b)*randn()
添加噪声imnoise()
fspecial() 建预定义的滤波算子
h = fspecial(type)
h = fspecial('average',hsize) %均值滤波,默认3*3
h = fspecial('disk',radius)
h = fspecial('gaussian',hsize,sigma) %高斯低通滤波,hsize默认3*3,sigma标准差默认0.5
h = fspecial('laplacian',alpha) %拉普拉斯算子,alpha范围[0,1],默认0.2
h = fspecial('log',hsize,sigma) %拉普拉斯高斯算子,hsize默认3*3,sigma标准差0.5(pix)
h = fspecial('motion',len,theta) %len运动长度(默认9),theta逆时针角度(默认0)
h = fspecial('prewitt') %用于边缘增强
h = fspecial('sobel') %边缘提取
自适应滤波和估计噪声
img_dst=wiener2(img_src,[m,n],noise)
[img_dst,noise]=wiener2(img_src,[m,n])
- 窗口大小默认3*3
filter2() 二维(灰度)中值滤波
img_dst=medfilt2(img_src,[m*n],padopt)
- m*n:默认3x3,定义区域(包括中心像素)
- padopt:'zeros':用0填充bianjie;'symmetric':对称扩展;'indexed':若img_src是double则用1填充,否则用0
imfilter() 滤波
img_dst=imfilter(img_src,w,method,boundary)
- w:滤波掩模
- method:'corr':相关计算(默认);'conv':卷积计算
- boundary:n:用n填充扩展(默认并设n=0);'replicate':通过复制边界值扩展;'symmetric':通过镜像反射扩展;'circular':将图像看作二位周期函数的一个周期来扩展
- size:'full':输出与被扩展图像相同大小;'same':输出与输入图像相同大小(默认)
imwrite() 写入图形文件
imwrite(A,'filename')
- A:图形数据
- filename:文件名,必须指定后缀名
- 如果 A 属于数据类型 uint8,则 imwrite 输出 8 位值。
- 如果 A 属于数据类型 uint16 且输出文件格式支持 16 位数据(JPEG、PNG 和 TIFF),则 imwrite 将输出 16 位的值。如果输出文件格式不支持 16 位数据,则 imwrite 返回错误。
- 如果 A 是灰度图像或者属于数据类型 double 或 single 的 RGB 彩色图像,则 imwrite 假设动态范围是 [0,1],并在将其作为 8 位值写入文件之前自动按 255 缩放数据。如果 A 中的数据是 single,则在将其写入 GIF 或 TIFF 文件之前将 A 转换为 double。
- 如果 A 属于 logical 数据类型,则 imwrite 会假定数据为二值图像并将数据写入位深度为 1 的文件(如果格式允许)。BMP、PNG 或 TIFF 格式以输入数组形式接受二值图像。
- 如果 A 包含索引图像数据,则应另外指定 map 输入参数。
cat() 矩阵合成彩图
img=cat(n,x_1,x_2...x_n)
- n:指定后面矩阵个数
- img:以uint8输出
Python+OpenCV
均值滤波
img_dst=cv2.blur(img_src,(5,5))
- (5,5):内核大小
高斯滤波
img_dst=cv2.GaussianBlur(img_src,(5,5),0)
- (5,5):内核大小
- 0:x和y方向的方差,不指定则根据内核大小计算,单指定x,则令y=x
中值模糊
img_dst=cv2.medianBlur(img_src,5)
- 5:内核大小
双边过滤
img_dst=cv2.bilateralFiter
- (img_src,9.75,75)