matlab imshow怎么用,如何在Python3 imshow()中使用MatLab的imshow()中的“扩展数据”...

我试图将一些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图像:

ZE0L2.png

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图像(图像应该是什么样子)

2JCQY.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值