0

我有一个 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 任何人都可以帮忙

4

3 回答 3

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;
于 2013-08-13T17:22:05.413 回答
1

我在下面发布的一个更简单,更强大的解决方案是我在下面发布的解决方案,x您拥有的数组在哪里

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

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

于 2013-08-13T20:59:56.260 回答
1

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

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

如果你想均匀分布零,你可以到以下。

k(1:2:512, 1:2:512) = 0;
于 2013-08-13T17:08:37.677 回答