gpt4 book ai didi

matlab - 使用 matlab 从图像中选择随机补丁

转载 作者:太空宇宙 更新时间:2023-11-03 19:31:07 26 4
gpt4 key购买 nike

我有一个尺寸为 400 x 600 的灰色图像。我想从此图像中随机选择一个大小为 50 x 50 的色 block 。

顺便说一下,我试着为此编写了一个代码,并且运行良好。但是根据我下面的代码,还有另一种解决方案?换句话说,还有比我自己的代码更性感的代码吗?

clear all;
close all;
clc;

image=imread('my_image.jpg');
image_gray=rgb2gray(image);
[n m]= size(image_gray); % 400 x600

L=50;

x=round(rand(1)*n); % generate a random integer between 1 and 400
y=round(rand(1)*m); % generate a random integer between 1 and 600

%verify if x is > than 400-50 , because if x is equal to 380 for example, so x+50 become %equal to 430, it exceeds the matrix dimension of image...
if(x<=n-L)
a=x:x+(L-1);
else
a=x-(L-1):x;
end

if(y<=m-L)
b=y:y+(L-1);
else
b=y-(L-1):y;
end

crop=image_gray(a,b);
figure(1);
imshow(crop);

最佳答案

这是最“性感”的。保证满意 ;-)

% Data
img=imread('my_image.jpg');
image_gray=rgb2gray(img);
[n m]= size(image_gray);
L = 50;

% Crop
crop = image_gray(randi(n-L+1)+(0:L-1),randi(m-L+1)+(0:L-1));

如果使用不支持 randi 的 Matlab 版本,请将最后一行替换为

crop = image_gray(ceil(rand*(n-L+1))+(0:L-1),ceil(rand*(m-L+1))+(0:L-1));

对您的代码的评论:

  • 您不应该使用image 作为变量名。它覆盖了一个函数。
  • 您应该将 round(rand(1)*n) 更改为 ceil(rand(1)*n)。或者使用 randi(n)
  • 使用randi(n-L+1) 代替randi(n)。这样你就可以避免 if

关于matlab - 使用 matlab 从图像中选择随机补丁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20350303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com