如何将矩阵的1/4元素转换为零

时间:2013-08-13 16:58:00

标签: matlab matrix

我有一个512x512矩阵。我想将该矩阵的1/4元素转换为0 /我怎么能这样做才能有人帮忙。我的程序如下:

clc;
clear all;
close all;
a=imread('images.jpg');
b=rgb2gray(a);
figure,imshow(b);
c=double(b);
figure,imshow(a);
figure,imshow(c);
d=rand(512,512);
e=exp(2*pi*d);
f=c.*e;
%figure,imshow(f);
g=fft2(f);
h=rand(512,512);
i=exp(2*pi*h);
j=g.*i;
k=fft2(j)

%这里k是一个512x512的矩阵。在下一步我想把1/4元素转移到ero可以任何人帮忙

3 个答案:

答案 0 :(得分:3)

如果您想要随机选择的点数:

如果您有512 x 512阵列:

v=randperm(512^2);
v=v(1:512*128);
k(v)=0;

以上内容可以在最近的matlab版本中缩写为

k(randperm(512^2,512*64))=0;

修改

更一般地说,对于图像阵列“k”

(案例size(k)是Nc x Nr)

Ns = numel(k);
v=randperm(Ns);   
v=v(1:round(Ns/4));
k(v) = 0;

或最新版本的matlab

Ns = numel(k);
k(randperm(Ns,round(Ns/4)))=0; 

(案例size(k)是Nc x Nr x 3)

Ns = numel(k)/3;
v=randperm(Ns);   
v=v(1:round(Ns/4));
k(v)=0;
k(v+Ns)=0;
k(v+Ns*2)=0;

答案 1 :(得分:1)

最简单的方法是将元素块设置为零。

k(1:256, 1:256) = 0;

如果您想要甚至分配零,您可以进行以下操作。

k(1:2:512, 1:2:512) = 0;

答案 2 :(得分:1)

一个更简单,更健壮的解决方案,不是那么硬编码的,我将在下面发布,其中x是你拥有的数组

x = rand(100);
perc = 0.25;
x(randperm(numel(x),round(numel(x)*perc))) = 0;

这更加强大,并且不依赖于声明的x的大小,它可以自己找到它。