图像滤波处理:空间滤波器实现
来源:互联网 发布:知乎 伊斯兰教和佛教 编辑:程序博客网 时间:2024/06/09 15:42
课后作业,实现:均值、谐波均值、中值、中点等滤波器。对应《数字图像处理》第三版,5.1-5.9课后题。
代码基于Matlab实现。完整代码及处理结果见:GitHub
步骤
- 加载图像
- 向外拓展一个像素的大小
- 与滤波器做卷积操作
- 输出图像
5.1 算数均值滤波
代码实现
close allclear allimage=imread('filtering.tif');figure();subplot(2,2,1);imshow(image);xlabel('Raw image');image_mean_3 = arithmetic_mean_filter(image,3);subplot(2,2,2);imshow(image_mean_3)xlabel('arithmetic mean filter/3');image_mean_5 = arithmetic_mean_filter(image,5);subplot(2,2,3);imshow(image_mean_5)xlabel('arithmetic mean filter/5');image_mean_9 = arithmetic_mean_filter(image,9);subplot(2,2,4);imshow(image_mean_9)xlabel('arithmetic mean/9');%%function [result_imag]= arithmetic_mean_filter(image,filter_size) Ex_image = extend_imag(image); result_imag = image; [M,N]=size(Ex_image); helf_size = (filter_size-1)/2; for x=1+helf_size:1:M-helf_size for y=1+helf_size:1:N-helf_size slid=Ex_image(x-helf_size:1:x+helf_size,y-helf_size:1:y+helf_size); result_imag(x,y)=sum(slid(:))/numel(slid); end endend%%function [result_imag] = extend_imag(image) [M,N] = size(image); temp = zeros(M+2,N+2); for x = 1:M temp(x+1,:) = [image(x,1) image(x,:) image(x,N)]; end temp(1,:) = temp(2,:); temp(M+2,:) = temp(M+1,:); result_imag = temp;end
其中 extend_imag
用于向外拓展像素。arithmetic_mean_filter
是核心的滤波器实现以及运算操作。
结果
5.2 几何均值滤波
这里只展示核心的滤波器实现代码。完整代码见GitHub
%%function [result_imag]= geo_mean_filter(image,filter_size) Ex_image = extend_imag(image); result_imag = image; [M,N]=size(Ex_image); helf_size = (filter_size-1)/2; for x=1+helf_size:1:M-helf_size for y=1+helf_size:1:N-helf_size slid=Ex_image(x-helf_size:1:x+helf_size,y-helf_size:1:y+helf_size); result_imag(x,y)=prod(slid(:))^(1/numel(slid)); end endend
5.3 谐波均值滤波
%%function [result_imag]= harmonic_wave_mean_filter(image,filter_size) Ex_image = extend_imag(image); result_imag = image; [M,N]=size(Ex_image); helf_size = (filter_size-1)/2; for x=1+helf_size:1:M-helf_size for y=1+helf_size:1:N-helf_size slid=Ex_image(x-helf_size:1:x+helf_size,y-helf_size:1:y+helf_size); slid = 1./slid; result_imag(x,y) = numel(slid(:))/sum(slid(:)); end endend
5.4 逆谐波均值滤波(Q=1.5)
%%function [result_imag]= Inv_harmonic_wave_mean_filter(image,filter_size) Ex_image = extend_imag(image); result_imag = image; [M,N]=size(Ex_image); helf_size = (filter_size-1)/2; Q=1.5; for x=1+helf_size:1:M-helf_size for y=1+helf_size:1:N-helf_size slid=Ex_image(x-helf_size:1:x+helf_size,y-helf_size:1:y+helf_size); result_imag(x,y) = sum(slid(:).^(Q+1))/sum(slid(:).^(Q)); end endend
5.5 逆谐波均值滤波(Q=-1.5)
%%function [result_imag]= Inv_harmonic_wave_mean_filter(image,filter_size) Ex_image = extend_imag(image); result_imag = image; [M,N]=size(Ex_image); helf_size = (filter_size-1)/2; Q=-1.5; for x=1+helf_size:1:M-helf_size for y=1+helf_size:1:N-helf_size slid=Ex_image(x-helf_size:1:x+helf_size,y-helf_size:1:y+helf_size); result_imag(x,y) = sum(slid(:).^(Q+1))/sum(slid(:).^(Q)); end endend
5.6 中值滤波
%%function [result_imag]= min_value_filter(image,filter_size) Ex_image = extend_imag(image); result_imag = image; [M,N]=size(Ex_image); helf_size = (filter_size-1)/2; for x=1+helf_size:1:M-helf_size for y=1+helf_size:1:N-helf_size slid=Ex_image(x-helf_size:1:x+helf_size,y-helf_size:1:y+helf_size); temp = sort(slid(:)); result_imag(x,y)= temp((numel(temp)-1)/2); end endend
5.7 最大值滤波
%%function [result_imag]= max_value_filter(image,filter_size) Ex_image = extend_imag(image); result_imag = image; [M,N]=size(Ex_image); helf_size = (filter_size-1)/2; for x=1+helf_size:1:M-helf_size for y=1+helf_size:1:N-helf_size slid=Ex_image(x-helf_size:1:x+helf_size,y-helf_size:1:y+helf_size); temp = slid(:); result_imag(x,y)= max(temp); end endend
5.8 最小值滤波
%%function [result_imag]= max_value_filter(image,filter_size) Ex_image = extend_imag(image); result_imag = image; [M,N]=size(Ex_image); helf_size = (filter_size-1)/2; for x=1+helf_size:1:M-helf_size for y=1+helf_size:1:N-helf_size slid=Ex_image(x-helf_size:1:x+helf_size,y-helf_size:1:y+helf_size); temp = slid(:); result_imag(x,y)= min(temp); end endend
5.9 中点滤波
%%function [result_imag]= half_value_filter(image,filter_size) Ex_image = extend_imag(image); result_imag = image; [M,N]=size(Ex_image); helf_size = (filter_size-1)/2; for x=1+helf_size:1:M-helf_size for y=1+helf_size:1:N-helf_size slid=Ex_image(x-helf_size:1:x+helf_size,y-helf_size:1:y+helf_size); temp = slid(:); result_imag(x,y)= (max(temp)+min(temp))/2; end endend
阅读全文
0 0
- 图像滤波处理:空间滤波器实现
- 图像滤波处理:均值、中值滤波器实现
- 图像滤波处理:频域滤波器实现
- 图像处理--图像滤波与滤波器
- 【图像处理】MATLAB:空间滤波
- 图像处理-线性空间滤波
- 【图像处理笔记】平滑空间滤波器
- 【图像处理笔记】锐化空间滤波器
- 【图像处理笔记】平滑空间滤波器
- 【图像处理笔记】锐化空间滤波器
- 图像处理基础(6):锐化空间滤波器
- 【图像处理】从图像空间域滤波到频域滤波
- 图像处理-线性滤波-3 高斯滤波器
- 图像处理-线性滤波-3 高斯滤波器
- 图像处理-线性滤波-3 高斯滤波器
- 图像处理-线性滤波-3 高斯滤波器
- 图像处理-线性滤波-3 高斯滤波器
- 图像处理-线性滤波-3 高斯滤波器
- solr之使用IKAnalyzer配置同义词,停止词,扩展词。
- 图像滤波处理:频域滤波器实现
- 信息系统项目管理师
- javascript变量和数据类型以及typeof操作符
- Windows配置Github的SSH-key
- 图像滤波处理:空间滤波器实现
- 第七周项目一
- LoadRunner录制app脚本详解
- 第十二周项目二——Kruskal算法的验证
- javascript-data type
- Unity(四) Orthographic Camera正交相机的Size
- 第七周 项目三 负数把正数赶出队列
- Editplus 删除空行
- java 十六进制输出