假设我有一个 RGB 图像矩阵,我想在它上面应用一些空间过滤器。一般来说,我想应用元素操作(请注意,这是一项大学作业,我不允许使用图像处理工具箱中提供的任何内置函数)。我决定将过滤器编写为函数,然后将bsxfun
这些函数应用于图像上。
一个简单的例子是:
我想将 50 添加到图像的所有灰度级,然后用 200 替换所有高于 200 的灰度级。这是我的代码:
a='C:\Users\sepideh\Desktop\IP_abadpour\S45C-113050518040.jpg';
b=imread(a);
b(:,:,1)=b(:,:,1)+50;
b(:,:,2)=b(:,:,2)+50;
b(:,:,3)=b(:,:,3)+50;
c=reshape(b,[],1);
d=bsxfun(@test,c,200);
test
是这种形式的函数:
function Out = test(in,a)
if in>a
in=200;
end
Out = in;
end
此代码不起作用,因为在第二行“in > a”是一个具有 0 和 1 的矩阵(我的意思是所有元素都不是 1,也不应该是),因此调试器不会分支到if
语句中。
你能指导我如何编写这个函数以及如何在图像上应用空间和傅立叶分析,而不影响性能和运行速度吗?