我的算法的特征提取步骤,对“3D”图像应用一些滤镜,并使用滤镜像素的值作为图像原始像素的特征。
我的问题是我只需要小像素子集(阈值像素)的特征,而不是所有图像。并且过滤所有图像而不是仅仅是一些像素是耗时的。
我的问题是如何只过滤图像的选定像素?为此目的是否有任何matlab函数?(我想我不能使用imfilter)
谢谢。
答案 0 :(得分:4)
使用roifilt2
。以下代码直接来自Matlab Documentation site
I = imread('eight.tif');
首先,定义感兴趣的区域:
c = [222 272 300 270 221 194];
r = [21 21 75 121 121 75];
BW = roipoly(I,c,r);
在您的情况下,BW
已经定义,因此您可以跳过上一步。
现在,应用过滤器:
H = fspecial('unsharp');
J = roifilt2(H,I,BW);
figure, imshow(I), figure, imshow(J)
答案 1 :(得分:2)
以下是Matlab中的快速矩阵运算,它为图像应用了一个阈值:
% let's assume i is your image (matrix)
thresh = 60; % set the threshold for pixel values
i = uint16(i > thresh) .* i; % adjust uint16 to your: class(i)
这会将所有像素设置为低于阈值的0
如果您希望之后将过滤器应用于较小的区域,则可以检查图像的哪些列和行包含大于零的值,并相应地裁剪图像或使用roipoly
定义感兴趣的区域。