我有个问题.我有一个矩阵A,其整数值介于0和5之间,例如:
x=randi(5,10,10)
Run Code Online (Sandbox Code Playgroud)
现在我想调用一个大小为3x3的过滤器,这给了我最常见的值
我试过2个解决方案:
fun = @(z) mode(z(:));
y1 = nlfilter(x,[3 3],fun);
Run Code Online (Sandbox Code Playgroud)
这需要很长时间......
和
y2 = colfilt(x,[3 3],'sliding',@mode);
Run Code Online (Sandbox Code Playgroud)
这也需要很长时间.我有一些非常大的矩阵,两种解决方案都需要很长时间.有没有更快的方法?
我通常imcrop用来裁剪rectanguler图像,但我想创建圆形裁剪.怎么做?
我知道有关于此的另一个问题,这里的链接:
[xx,yy] = ndgrid((1:imageSize(1))-ci(1),(1:imageSize(2))-ci(2));
mask = (xx.^2 + yy.^2)<ci(3)^2;
Run Code Online (Sandbox Code Playgroud)
结果imshow(mask)是带有白色背景的矩形
错误 roimaskcc
http://www.mathworks.com/matlabcentral/newsreader/view_thread/242489
[xx,yy]=ndgrid(1:size(X,1), 1:size(X,2));
CroppingMask= ( (xx-Xcenter).^2+(yy-Ycenter).^2<=Radius^2 );
X=X.*CroppingMask;
Run Code Online (Sandbox Code Playgroud)
结果imshow(CroppingMask)是一个黑色背景的矩形,矩形中心有一个小的白色圆形.当我运行第3行时,它显示错误.
请一步一步帮助我,因为我是初学者.
这是我的形象:https://www.dropbox.com/s/5plqzqgyb1ej6gh/patricia.jpg.它的分辨率是480x640.
我有一个矩阵,我希望得到每个元素的周围元素的索引.所有这些结果必须以下列方式存储到矩阵中.矩阵的每一行对应于矩阵元素,并且该矩阵的每列包含邻居索引.例如,对于4x4矩阵,我们将得到一个16x8结果数组.一些矩阵元素没有8个邻居.
有一个例子,我认为它有效,我有什么方法可以避免循环?:
ElementNeighbors = [];
for n = 1:numel(Matrix)
NeighborsMask = [ n-1 n+1 n+size(matrix,1) n-size(Matrix,1) n-size(Matrix,1)-1 n-size(Matrix,1)+1 ...
n+size(Matrix,1)-1 n+size(Matrix,1)+1 ];
ElementNeighbors = [ElementNeighbors ; NeighborsMask ];
end
ElementNeighbors (ElementNeighbors ==0|ElementNeighbors <0) = NaN;
Run Code Online (Sandbox Code Playgroud)