我有一张尺寸为400 x 600的灰色图像.我想从这张图片中随机选择一个尺寸为50 x 50的贴片.
顺便说一下,我试着为此编写一个代码,它运行正常.但根据我的下面的代码,还有另一种解决方案吗?换句话说,还有另一个代码比我自己的代码更性感吗?
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 …Run Code Online (Sandbox Code Playgroud) 通常,Gabor过滤器,顾名思义,用于过滤图像并提取它在过滤的相同方向上定向的所有内容.
在这个问题中,您可以看到比此链接中编写的代码更高效的代码
假设有4个方向的滤波器16个刻度,所以我们得到64个gabor滤波器.
scale = [7:2:37],7x7到37x37,步长为两个像素,所以我们有7x7,9x9,11x11,13x13,15x15,17x17,19x19,21x21,23x23,25x25,27x27,29x29,31x31,33x33, 35x35和37x37.
direction = [0,pi/4,pi/2,3pi/4].
空间域中的Gabor滤波器方程为:

频域中的Gabor滤波器方程为:

我试图创建一个Gabor过滤器.我们都知道这种滤波器比任何其他滤波器更复杂,因为它具有更复杂的特征,例如具有不同的尺度和方向.Gabor滤波器的等式是:

为了创建具有特定比例和方向的Gabor滤波器,维基百科向我们提供了一个简单的matlab代码:
sigma_x = sigma;
sigma_y = sigma/gamma;
nstds = 3;
xmax = max(abs(nstds*sigma_x*cos(theta)),abs(nstds*sigma_y*sin(theta)));
xmax = ceil(max(1,xmax));
ymax = max(abs(nstds*sigma_x*sin(theta)),abs(nstds*sigma_y*cos(theta)));
ymax = ceil(max(1,ymax));
xmin = -xmax; ymin = -ymax;
[x,y] = meshgrid(xmin:xmax,ymin:ymax);
x_theta=x*cos(theta)+y*sin(theta);
y_theta=-x*sin(theta)+y*cos(theta);
gb= exp(-.5*(x_theta.^2/sigma_x^2+y_theta.^2/sigma_y^2)).*cos(2*pi/lambda*x_theta+psi);
Run Code Online (Sandbox Code Playgroud)
我想知道这段代码是否正确.我注意到上面的代码并没有完全响应Gabor滤波器的等式.例如:在代码中,我们有:sigma_x=sigma和sigma_y=sigma/gamma......我们有gb=exp(-.5*(x_theta.....)).我不明白5这个等式是什么..
上面写的matlab代码是否正确地响应了Gabor滤波器的等式?我需要您的意见,如果可能的话,如果不正确则优化代码.
任何帮助将不胜感激.
我有一个向量y = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]'大小为 的向量6 x 1。
我想将此向量保存在 a 中.csv file,但我希望它.csv file是这样的:

我在 MATLAB 中编写了这段代码:
csvwrite('my_file.csv', y)
Run Code Online (Sandbox Code Playgroud)
如何编辑我的代码以获得上面的文件?
任何帮助将不胜感激。
我有一个向量v的大小1 x 5,以及对角矩阵D大小5 x 5.在我的例子中,我有v = [0 1 2 3 4].
第一个问题:我希望把矢量V的对角线上的D,所以D(1,1) = 0,D(2,2) = 1,D(3,3) = 2,D(4,4) = 3和D(5,5) = 4.
我为此编写了一个matlab代码,但我确信还有另一种自动方法在计算上要便宜得多.所以我写的(并从中进行优化)如下:
ii = 1;
for a = 1 : size(D,1)
for b = 1 : size(D,2)
if(a == b)
D(a,b) = v(1, ii);
ii = ii + 1;
end
end
end
Run Code Online (Sandbox Code Playgroud)
第二个问题:在完成第一个问题之后,我现在需要检查D的对角线值是否等于零.如果我能找到(以自动方式)D对角线上的值等于零,那么将其替换为0.001.
事实上,这可以用很多方式编写,例如:
for a …Run Code Online (Sandbox Code Playgroud) 如果我有一个大小的图像400 x 600.我知道如何80 x 80通过使用下面的代码来调整大小:
original_image = imread(my_image);
original_image_gray = rgb2gray(original_image);
Image_resized = imresize(original_image_gray, [80 80]);
Run Code Online (Sandbox Code Playgroud)
但我认为这imresize会使图像质量大幅下降.那么如何在不降低质量的情况下调整大小呢?
在这个链接中,我有:
| 0.1 0.2 0.3 0.4
----------------------
1 | 10 11 12 13
2 | 11 12 13 14
3 | 12 13 14 15
4 | 13 14 15 16
Y = [0.1 0.2 0.3 0.4];
X = [1 2 3 4];
Z = [10 11 12 13; 11 12 13 14; 12 13 14 15; 13 14 15 16];
Run Code Online (Sandbox Code Playgroud)
我在matlab中使用命令"surf(X,Y,Z)"绘制了曲面Z. 我有:

但实际上我并不了解绘制的表面.有人可以向我详细解释(在文本中)这个表面会发生什么吗?例如:我们如何观察点(2,0.2,12)?
我有一个矩阵A = [0 3 4; 5 0 6; 0 6 0];
我知道要计算零元素的总数,我可以简单地使用该函数find.那就是,Total_number_of_zero_elements = length(find(A==0));
这将给我4个.
问题:
以现在的矩阵B为例,生成如下:
B = toeplitz(0.1.^(0:30-1));
Total_number_of_zero_elements = length(find(B==0));
Run Code Online (Sandbox Code Playgroud)
上面的代码将给出:Total_number_of_zero_elements = 0.矩阵B包含许多0值,但写为0.0000.
那么matlab使用函数find不能区分0到0.0000吗?
任何帮助将非常感谢!
matlab ×8
convolution ×1
filter ×1
filtering ×1
image ×1
matlab-guide ×1
matrix ×1
plot ×1
resize ×1