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

  • Post author:
  • Post category:其他


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操作。

这样操作的最大优势在于,可以节约找位置的时间,如果你的图像很大的话,直接通过交互式的截取来完成对图像的切片。



版权声明:本文为CSDN_Yangk原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。