我想扩展一个我在Stackoverflow上讨论过的问题.它正在处理2D numpy数组,我想用三维数组做同样的事情.
我想将2D数组的元素"移动"到新坐标,这些坐标存储在其他2个数组中.我希望自动化这个,因为实际上我的阵列很大(400x200x100).有些值不会找到他的坐标并且不会被使用,其中一些坐标被屏蔽,我在下面的例子中通过使用值0指示.如果坐标被屏蔽,我想要重新洗牌的数组中的元素将不会使用.
import numpy as np
#My new coordinates in X and Y directions
mx = np.array([[[ 1., 2., 3., 4., 0.],
[ 1., 2., 3., 4., 0.],
[ 1., 2., 3., 4., 0.],
[ 1., 2., 3., 4., 0.],
[ 1., 2., 3., 4., 0.]],
[[ 1., 2., 3., 4., 0.],
[ 1., 2., 3., 4., 0.],
[ 1., 2., 3., 4., 0.],
[ 1., 2., 3., 4., 0.],
[ 1., 2., 3., 4., 0.]]])
my …
Run Code Online (Sandbox Code Playgroud) 我有4个子图,我实现在1行上绘制3个子图,但是我不能在第二行上添加另一个图,它必须具有3个数字的相同宽度.前三个数字:
第二个数字,我想补充一下:
我试着这样:
plt.close()
font={'family':'sans-serif','weight':'normal','size':'14'}
plt.rc('font',**font)
fig, axes = plt.subplots(nrows=3, ncols=1)
plt.tight_layout(pad=0.05, w_pad=0.001, h_pad=2.0)
ax1 = plt.subplot(231) # creates first axis
#ax1.text(20, 2500, 'CYCLE :', size=14)
#ax1.text(1000, 2500, str((image)*50+50), size=14)
ax1.tick_params(labelsize=8)
ax1.set_xticks([0,2000,500,1000,1500])
ax1.set_yticks([0,2000,500,1000,1500])
ax1.tick_params(labelsize=8)
ax1.imshow(mouchetis[::-1,::],alpha=0.6)
ax1.imshow(V_exp_invmaskA,cmap='hot',extent=(X.min(),2015,Y.min(),2015), alpha=0.4)
i1 = ax1.imshow(V_maskA,cmap='hot',extent=(X.min(),2015,Y.min(),2015),alpha=0.8)
ax1.set_xticklabels([0,2000,500,1000,1500])
ax1.set_yticklabels([0,2000,500,1000,1500])
ax1.set_title("MASQUE A", y=1.05, fontsize=10)
ax2 = plt.subplot(232) # creates second axis
ax2.set_xticks([0,2000,500,1000,1500])
ax2.set_yticks([0,2000,500,1000,1500])
ax2.imshow(mouchetis[::-1,::],alpha=0.6)
ax2.imshow(V_exp_invmaskB,cmap='hot',extent=(X.min(),2015,Y.min(),2015), alpha=0.4)
i2 = ax2.imshow(V_maskB,cmap='hot',extent=(X.min(),2015,Y.min(),2015),alpha=0.8)
ax2.set_title("MASQUE B", y=1.05, fontsize=10)
ax2.set_xticklabels([])
ax2.set_yticklabels([])
ax3 = plt.subplot(233) # creates first axis
ax3.set_xticks([0,2000,500,1000,1500])
ax3.set_yticks([0,2000,500,1000,1500])
ax3.imshow(mouchetis[::-1,::],alpha=0.6)
ax3.imshow(V_exp_invmaskC,cmap='hot',extent=(X.min(),2015,Y.min(),2015), alpha=0.4)
i3 …
Run Code Online (Sandbox Code Playgroud) 我使用matplotlib绘制大量图片以便用它制作视频但是当我尝试制作视频时,我看到图片的形状在时间上是不一样的......它会导致一些错误.当我使用Imsave时,是否有命令强制输出的形状?
你可以看到我的代码的一部分:
plt.close()
fig, axes = plt.subplots(nrows=2, ncols=3)
###Figures composante X
plt.tight_layout(pad=0.05, w_pad=0.001, h_pad=2.0)
ax1 = plt.subplot(231) # creates first axis
ax1.set_xticks([0,2000,500,1000,1500])
ax1.set_yticks([0,2000,500,1000,1500])
ax1.tick_params(labelsize=8)
i1 = ax1.imshow(U,cmap='hot',extent=(X.min(),2000,Y.min(),2000), vmin=U.min(), vmax=U.max())
cb1=plt.colorbar(i1,ax=ax1,ticks=[U.min(),(U.min()+U.max())/2., U.max()],fraction=0.046, pad=0.04,format='%.2f')
cb1.ax.tick_params(labelsize=8)
ax1.set_title("$ \mathrm{Ux_{mes} \/ (pix)}$", y=1.05, fontsize=12)
ax2 = plt.subplot(232) # creates second axis
ax2.set_xticks([0,2000,500,1000,1500])
ax2.set_yticks([0,2000,500,1000,1500])
i2=ax2.imshow(UU,cmap='hot',extent=(X.min(),2000,Y.min(),2000), vmin=UU.min(), vmax=UU.max())
ax2.set_title("$\mathrm{Ux_{cal} \/ (pix)}$", y=1.05, fontsize=12)
ax2.set_xticklabels([])
ax2.set_yticklabels([])
cb2=plt.colorbar(i2,ax=ax2,fraction=0.046, pad=0.04,ticks=[UU.min(),(UU.min()+UU.max())/2.,UU.max()],format='%.2f')
cb2.ax.tick_params(labelsize=8)
ax3 = plt.subplot(233) # creates first axis
ax3.set_xticks([0,2000,500,1000,1500])
ax3.set_yticks([0,2000,500,1000,1500])
i3 = ax3.imshow(resU,cmap='hot',extent=(X.min(),2000,Y.min(),2000),vmin=0.,vmax=0.1)
ax3.imshow(scipy.ndimage.filters.gaussian_filter(masquey2, 3),cmap='hot',alpha=0.2,extent=(X.min(),2000,Y.min(),2000))
ax3.set_title("$\mathrm{\mid \/ Ux_{mes} - Ux_{cal}\mid …
Run Code Online (Sandbox Code Playgroud) 我想用形状为 8x8 的网格插入尺寸为 4x4(例如,实际上接近 1000x1000)的二维数组“测试”。
import numpy as np
X = np.arange(0,4,1)
Y = np.arange(0,4,1)
points = np.vstack((X,Y))
points = points.T #my coordinates
#my values as a 2D array
test = np.array([[ 1.2514318 , 1.25145821, 1.25148472, 1.25151133],
[ 1.25087456, 1.25090105, 1.25092764, 1.25095435],
[ 1.25031581, 1.25034238, 1.25036907, 1.25039586],
[ 1.24975557, 1.24978222, 1.24980898, 1.24983587]])
Run Code Online (Sandbox Code Playgroud)
我尝试使用 griddata,但它似乎只能用于一维,不是吗?正如错误告诉我我有“不同数量的值和点”我犯了错误吗?
from scipy.interpolate import griddata
grid_x, grid_y = np.mgrid[0:4:8j, 0:4:8j]
grid_z0 = griddata(points, test, (grid_x, grid_y), method='linear')
Run Code Online (Sandbox Code Playgroud) 我正在使用立体声系统,因此我试图通过三角测量获得某些点的世界坐标.
我的相机呈现一个角度,Z轴方向(深度方向)与我的表面不正常.这就是为什么当我观察平面时,我得不到恒定的深度而是"线性"变化,对吗?我希望从基线方向的深度...我如何重新投射?
我的代码与我的投射数组和三角函数:
#C1 and C2 are the cameras matrix (left and rig)
#R_0 and T_0 are the transformation between cameras
#Coord1 and Coord2 are the correspondant coordinates of left and right respectively
P1 = np.dot(C1,np.hstack((np.identity(3),np.zeros((3,1)))))
P2 =np.dot(C2,np.hstack(((R_0),T_0)))
for i in range(Coord1.shape[0])
z = cv2.triangulatePoints(P1, P2, Coord1[i,],Coord2[i,])
Run Code Online (Sandbox Code Playgroud)
--------编辑以后-----------
谢谢scribbleink,所以我试图应用你的提议.但我认为我有一个错误,因为它不能很好地工作,你可以在下面看到.并且点云似乎被弯曲并朝向图像的边缘弯曲.
U, S, Vt = linalg.svd(F)
V = Vt.T
#Right epipol
U[:,2]/U[2,2]
# The expected X-direction with C1 camera matri and C1[0,0] the focal length
vecteurX = np.array([(U[:,2]/U[2,2])[0],(U[:,2]/U[2,2])[1],C1[0,0]])
vecteurX_unit = vecteurX/np.sqrt(vecteurX[0]**2 + …
Run Code Online (Sandbox Code Playgroud) 我正在尝试填补立体应用棋盘的漏洞。棋盘是微型的,因此避免灰尘很复杂......正如你所看到的:
因此,角点检测是不可能的。我尝试使用 SciPy 的 binary_fill_holes 或类似方法,但我有一个全黑图像,我不明白。
我必须绘制一个有11个子点的图,如下所示.但由于它是一个奇数,我不知道如何处理子图(4,3,12)去除它...并将2个最后的图放在中心而且我想增加子图大小作为空间太重要了.代码如下.
代码是:
plt.close()
fig, axes = plt.subplots(nrows=4, ncols=3)
plt.tight_layout(pad=0.05, w_pad=0.001, h_pad=2.0)
ax1 = plt.subplot(431) # creates first axis
ax1.set_xticks([])
ax1.set_yticks([])
ax1.tick_params(labelsize=8)
i1 = ax1.imshow(IIIm,cmap='hot',extent=(0,2000,0,2000),vmin=-0.2,vmax=-0.1)
i11 = ax1.plot((0,600),(1000,1000),'k-',linewidth=3)
cb1=plt.colorbar(i1,ax=ax1,ticks=[-0.2,-0.15,-0.1],fraction=0.046, pad=0.04,format='%.3f')
cb1.ax.tick_params(labelsize=8)
ax1.set_title("$n = -3$", y=1.05, fontsize=12)
ax2 = plt.subplot(432) # creates second axis
ax2.set_xticks([])
ax2.set_yticks([])
i2=ax2.imshow(IIm,cmap='hot',extent=(0,2000,0,2000),vmin=-0.1,vmax=0.1)
i22 = ax2.plot((0,600),(1000,1000),'k-',linewidth=3)
ax2.set_title("$n = -2$", y=1.05, fontsize=12)
ax2.set_xticklabels([])
ax2.set_yticklabels([])
cb2=plt.colorbar(i2,ax=ax2,ticks=[-0.1,0.0,0.1],fraction=0.046, pad=0.04,format='%.3f')
cb2.ax.tick_params(labelsize=8)
ax3 = plt.subplot(433) # creates first axis
ax3.set_xticks([])
ax3.set_yticks([])
i3 = ax3.imshow(Im,cmap='hot',extent=(0,2000,0,2000),vmin=-1,vmax=-0.2)
i33 = ax3.plot((0,600),(1000,1000),'k-',linewidth=3)
ax3.set_title("$n = -1$ ", y=1.05, fontsize=12)
cb3=plt.colorbar(i3,ax=ax3,ticks=[-1,-0.6,-0.2],fraction=0.046, …
Run Code Online (Sandbox Code Playgroud) 我试图确定两个图像之间的变换(旋转+平移+缩放)以便移动它们。
这些图像是用两种不同的方式拍摄的,产生了截然不同的纹理。所以我不能使用基于维持光流的技术。我认为对图像进行阈值处理以提取几何形状会很好(请参见下面的示例)。但后来我很难看到我能做什么......也许提取垂直线和中心圆来帮助我提取我的变换。
我使用 python 工作,我研究了 Opencv 可以提供的功能,但目前还没有取得什么成功。
--- 稍后编辑 ---
我用霍夫变换检测了圆和线(见下图)。事实上,这将有助于正确注册。但是,我可以使用 Python 上的什么工具来注册这些元素呢?我经常使用光流守恒,但在这种情况下它相当复杂......
我正在尝试实现一个程序,该程序将输入两个立体图像并找到具有特征匹配的关键点之间的距离。有什么办法吗?我正在使用 SIFT/BFMatcher,我的代码如下:
import numpy as np
import cv2
from matplotlib import pyplot as plt
img1 = dst1
img2 = dst2
# Initiate SIFT detector
sift = cv2.SIFT()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)
# BFMatcher with default params
bf = cv2.BFMatcher()
matches = bf.knnMatch(des1, des2, k=2)
# Apply ratio test
good = []
for m, n in matches:
if m.distance < 0.3 * n.distance:
good.append([m])
# cv2.drawMatchesKnn expects …
Run Code Online (Sandbox Code Playgroud) 我想在布局内绘制刻度标记。但自从Python更新后,这些标记被绘制在外面......我尝试在我的脚本中添加“ax.yaxis.set_tick_params(direction = 'in')”。它仅适用于主要值。
fig, ax = plt.subplots()
plt.loglog(testI[:],a[:],'b+',linewidth=2,label='a');
plt.loglog(testI[:],b[:],'y+',linewidth=2,label='b');
plt.xlim(6,45)
plt.ylim(10**(-7),19**(-1))
ax.yaxis.set_tick_params(direction = 'in')
ax.xaxis.set_tick_params(direction = 'in')
plt.show()
Run Code Online (Sandbox Code Playgroud)
python ×10
matplotlib ×4
opencv ×4
numpy ×3
arrays ×2
stereo-3d ×2
subplot ×2
coordinates ×1
scikit-image ×1
scipy ×1
shape ×1