Matlab转Python:矩阵冒号(:)功能及代码转换求助
从MATLAB到Python:矩阵索引中冒号(:)的作用与代码转换
嘿,我来帮你把这个问题掰明白!先从MATLAB里的冒号说起,再给你转成对应的Python代码~
MATLAB中冒号(:)的索引逻辑
在MATLAB的矩阵(这里是图像矩阵)索引里,start:end的意思是取从start位置到end位置的所有元素,并且包含这两个端点。
看你这段代码:
DCT_matrix = orig_img(row: row + blocksize-1, col: col + blocksize-1);
它的作用是从原始图像orig_img里抠出一个blocksize×blocksize的正方形子块:
- 行方向:选中第
row行到第row + blocksize - 1行,刚好是blocksize行 - 列方向:选中第
col列到第col + blocksize - 1列,刚好是blocksize列
转换成Python代码(基于NumPy)
Python里处理图像矩阵一般用NumPy数组,而NumPy的切片规则是左闭右开——也就是start:end会包含start对应的元素,但不包含end对应的元素。
所以要得到和MATLAB完全一样的子块,我们需要把结束索引往后挪一位(因为原来的row + blocksize -1是MATLAB的最后一行,对应Python里的结束索引是row + blocksize,这样切片会取到row到row + blocksize -1的所有行)。
对应的Python代码是:
import numpy as np # 假设orig_img是已经转成NumPy数组的图像(比如用OpenCV/PIL读取后转换) DCT_matrix = orig_img[row : row + blocksize, col : col + blocksize]
补充小提示
如果你的图像是用PIL库读取的Image对象,需要先转成NumPy数组才能用这种切片方式:
from PIL import Image # 读取图像并转成NumPy数组 orig_img = np.array(Image.open("your_image_path.jpg"))
内容的提问来源于stack exchange,提问作者EAgamy
相关产品推荐
相关产品推荐

