MATLAB图像处理:01对图像的部分区域进行中值滤波

PS:网上很多资料都没有对这个问题进行研究的,个人摸索写一写,大家可以共同探讨一下,有没有更好的思路。

1实验思路

我的想法是,拿出来,放进去。也就是把要处理的区域,拿出来,然后进行中值滤波,再放回原来的位置。

1中值滤波

中值滤波的相关知识网上很多,在此不再赘述。
仅介绍一下语法:
medfilt2(img,[n,n]);
注:img:要处理的图片
n为滤波器的大小

2切片ginput

[x1,y,button] = ginput(2);
注: 用鼠标取两个点,两点的x,y坐标分别记录在x1,y中,需注意的是x1,y均为n*1的向量,在此n=2。button可有可无。

3读某行某列

1:读取所有行所有列–直接键入 a或a(:😅

2: 读取前 i 行,前 j 列。键入a( 1:i, 1:j) 其中括号内,行列以逗号隔开,逗号前的控制行,逗号后的控制列

比如说读取矩阵a的前两行两列,键入a(1:2,1:2)
3:读取指定的第 i 行,第j 列–直接键入a(i , j)

4: 读取每一行,第j 列,键入a(:,j) 其中括号内的 :表示所有行,换言之读取第i行的所有列,键入a(i , :)即可

5:读取指定几行的指定几列,就要用上 “ [ ] ”了。读取第 i2、i4 行,第j3、j4列,键入a([2,4],[3,4]) 其中行列用逗号隔开,逗号前的 [ ] 内输入要读取的行,逗号后的 [ ] 内输入要读取的列。

[x1,y,button] = ginput(2); 

roi=x(x1(1,1):x1(2,1),y(1,1):y(2,1));

4实验代码

clc
close all 
clear all

x=imread('gift.tif');
x=im2double(x);
figure(1);
imshow(x);
[x1,y,button] = ginput(2); 

roi=x(x1(1,1):x1(2,1),y(1,1):y(2,1));
roi_filt = medfilt2(roi,[10,10]);
newI = x;
newI(x1(1,1):x1(2,1),y(1,1):y(2,1)) = roi;
figure(2);
imshow(newI);

需要注意的是,由于我读取的是tif格式的文件,所以要进行对x的im2double操作。
这样操作的最大优势在于,可以节约找位置的时间,如果你的图像很大的话,直接通过交互式的截取来完成对图像的切片。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值