【发布时间】:2013-06-24 09:39:59
【问题描述】:
假设我有一个 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 声明。
您能否指导我如何编写此函数以及如何在图像上应用空间和傅立叶分析,而不影响性能和运行时速度?
【问题讨论】:
标签: performance matlab image-processing filter bsxfun