如何在Python3 imshow()中使用MatLab的imshow()中的“扩展数据”

2024-06-28 11:01:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将一些MatLab代码转换成Python3,但是有一行出现了问题,MatLab中的行是

imshow(sqrt(I),[0,100],'InitialMagnification','fit','xdata',[-1,1]*a,'ydata',[-1,1]*a);

其中a是某个常数。在

我遇到的问题是'XData'和{}。我现在使用的是Python代码

^{pr2}$

如何将'XData''YData'元素转换成Python?在

编辑Python和MatLab的完整代码

Python代码:

(我很抱歉,但我还没有对此代码进行注释,如果需要,我可以这样做)

import numpy as np
import matplotlib.pyplot as plt

plt.close("all")

l = 633*10**(-6)
L = 10

N = 2**11
Nx = 2**11
Ny = 2**11

xmax = 5*10**(-4)
ymax = 5*10**(-4)
curlyv = np.zeros((Nx,Ny),dtype=np.double)
x = np.tile(np.linspace(-xmax,xmax,Nx),(Ny,1))
y = np.tile(np.linspace(-ymax,ymax,Ny).reshape(Ny,1),(1,Nx))
h = np.sqrt(4*np.pi/(l*L))

np_x = np.array(x)
np_y = np.array(y)

aperture = np.sqrt(np_x**2 + np_y**2) >= 100*10**-6

curlyv[aperture] = 1    

vprime = np.fft.fftshift(np.fft.fft2(curlyv))
I = vprime*np.conj(vprime)
Imax = np.real(np.amax(I))
fig2 = plt.figure()
Imax_b = Imax/5000
pltp = plt.imshow(np.sqrt(np.real(I)), vmin = 0, vmax = 100, cmap='Greys_r', extent=(-Nx/h*1000, Nx/h*1000, -Ny/h*1000, Ny/h*1000))

plt.show()

Python图像:

Python Image

MatLab代码

% This script calculates, via a 2D Fourier Transform, the Fraunhofer diffraction
% pattern due to a circular aperture. Source plane is the xy-plane. The field plane
% is at a distance L from the source plane.

lambda = 633e-6; L = 10;                     % meters

% Set up the source plane domain and initialize the source plane amplitude (curlyv) at each point
N=2^11; Nx = N; Ny = N;                         % resolution (pixels)
xmax=5e-4;                                  % meters
ymax=5e-4;                                  % meters
curlyv = zeros(Nx,Ny);                      % curlyv has one complex value at each location (x,y)
x=repmat(linspace(-xmax,xmax,Nx),Ny,1);     % x domain (source plane)
y=repmat(linspace(-ymax,ymax,Ny)',1,Nx);    % y domain (source plane)
h = sqrt(4*pi/(lambda*L));                  % axes scaling (from the theory)

% construct a logical vector corresponding to the (x,y)-locations where the incident field is
% non-zero. Only need to set these elements of curlyv so some non-zero values
% corresponding to the incident field's complex amplitude.

aperture = sqrt(x.^2+y.^2) >= 100e-6;       % logical vector giving aperture shape
% The incident field ampli0tude u(x,y) is just 1 everywhere in the aperture. The additional
% exponential corresponding to the phase in curlyv is formally required from the theory but can be omitted to a good
% approximation in most cases.
curlyv(aperture)=1;                         %exp(1i*h^2*(x(aperture).^2+y(aperture).^2));

figure(1);
iptsetpref('ImShowAxesVisible','On');
imshow(curlyv,[-0.5 1],'InitialMagnification','fit',...
    'xdata',[-xmax, xmax]*1000,'ydata',[-ymax,ymax]*1000); % display the diffraction pattern
vprime = fftshift(fft2(curlyv,Nx,Nx));      % perform the 2D FT to get the field plane field amplitude
I = conj(vprime).*vprime;                   % calculate intensity
xlabel('mm'); ylabel('mm');

figure(2);
Imax=max(max(I));
iptsetpref('ImShowAxesVisible','On');
imshow(sqrt(I),[0,sqrt(Imax)/50],'InitialMagnification','fit','xdata',[-1,1]*Nx/h*1000,'ydata',[-1,1]*Ny/h*1000); % display the diffraction pattern

colormap(bone); shg;  shading interp;
axis([-2,2,-2,2]*1000);       % 0 =  black, Imax/10 = white (so many pixels will be saturated)
xlabel('mm'); ylabel('mm');

MatLab图像(图像应该是什么样子)

enter image description here


Tags: theto代码fieldnpsqrtymaxnx
1条回答
网友
1楼 · 发布于 2024-06-28 11:01:08

^{} for ^{} in MATLAB设置

Limits along X axis of a nondefault spatial coordinate system, specified as a two-element vector

(与YData和y轴类似)。因为^{}, the ^{} parameter似乎有相同的效果:

extent : scalars (left, right, bottom, top), optional, default: None

The location, in data-coordinates, of the lower-left and upper-right corners. If None, the image is positioned such that the pixel centers fall on zero-based (row, column) indices.

因此,等效的调用是

matplotlib.pyplot.imshow(np.sqrt(np.real(I)), vmin = 0, vmax = 100, extent=(-a, a, -a, a))

相关问题 更多 >