R语言:中值滤波 (Median Filter)
图像处理 - 中值滤波
Ref: 中值滤波基本介绍
简单基于双循环的R语言代码:
MedianFilter <- function(mat,filterSize = 3){
rowNum <- nrow(mat)
colNum <- ncol(mat)
margin <- (filterSize-1) %/% 2
for(i in (1+margin):(rowNum-margin)){
for(j in (1+margin):(colNum-margin)){
seq_ <- as.numeric(mat[(i - margin):(i + margin), (j - margin):(j + margin)])
mat[i,j] = median(seq_)
}
}
return(mat)
}
传入
mat
,一个二维矩阵。支持设定filterSize
,即滤波器的大小,一般设置为奇数。返回一个经过滤波处理后的矩阵。
一个简单的案例
图片为个人数据私有,不共享及公开 (以下图像为医学分子图像,Imaging Mass Cytometry, IMC 技术获得)
原始图像
处理后图像
Discussion
上述基于双循环是最简单的算法,计算效率上有很大的提升空间。其他问题欢迎留言or私信讨论。