我有一个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可以任何人帮忙
答案 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的大小,它可以自己找到它。