np.newaxis知识点整理

做kaggle比赛时,看到有方法中用到np.newaxis,现将知识点整理如下。

>>import numpy as np
>>type(np.newaxis)
NoneType
>>np.newaxis == None
True

可以发现np.newaxi等价于 None。1

>>x = np.array([0, 1, 2])
>>x.shape
(3,)
>>x[:, np.newaxis]
array([[0],
       [1],
       [2]])
>> x[:, np.newaxis].shape
(3, 1)

 从上面可以看出,通过np.newaxis可以将一维数组变为列向量的形式。(ps.这里(3,)只是表示一维数组,并不是列向量)

>>y = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>y[:, 1]
array([2, 5, 8])
>>y[:, 1].shape
(3,)

可以看出y[:, 1]返回的是一维数组,如果我们希望某一列返回的仍然是列的结构,需要进行如下操作,

>>y[:, 1][:, np.newaxis]
array([[2],
       [5],
       [8]])

如果想实现第一列和第三列的拼接,

>>y_sub = np.hstack([y[:, 0][:, np.newaxis], y[:, 2][:, np.newaxis]])
>>y_sub
array([[1, 3],
       [4, 6],
       [7, 9]])

也可以通过切片的方式,

>> 
array([[1, 3],
       [4, 6],
       [7, 9]])

 

### 图像分割项目实例与案例 以下是基于提供的引用以及专业知识整理的图像分割项目的具体实例和代码示例。 #### GrabCut 算法实现 GrabCut 是一种经典的交互式图像分割算法,能够通过迭代优化前景和背景模型来完成高质量的分割。以下是一个 Python 的简单实现: ```python import numpy as np import cv2 from matplotlib import pyplot as plt # 加载图片并定义矩形区域 img = cv2.imread('your_image_path.jpg') # 替换为您的图片路径[^1] mask = np.zeros(img.shape[:2], np.uint8) bgdModel = np.zeros((1, 65), np.float64) fgdModel = np.zeros((1, 65), np.float64) rect = (50, 50, img.shape[1]-50, img.shape[0]-50) # 定义感兴趣区域 cv2.grabCut(img, mask, rect, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_RECT) # 更新掩码 mask2 = np.where((mask == 2) | (mask == 0), 0, 1).astype('uint8') img_cut = img * mask2[:, :, np.newaxis] plt.imshow(cv2.cvtColor(img_cut, cv2.COLOR_BGR2RGB)) plt.colorbar() plt.show() ``` 此代码展示了如何利用 OpenCV 库中的 `grabCut` 函数进行基本的图像分割操作[^2]。 --- #### SAM(Segment Anything Model)的应用 SAM 是 Meta 提出的一种先进的图像分割技术,支持点提示输入方式,可以根据用户的标注生成精确的分割结果。下面是如何使用 SAM 进行目标检测的具体流程: 假设我们希望从一张图片中提取一只猫的目标对象,则可以通过如下方式进行操作: ```python import torch from segment_anything import sam_model_registry, SamPredictor device = 'cuda' if torch.cuda.is_available() else 'cpu' # 初始化 SAM 模型 sam_checkpoint = "path_to_sam_checkpoint.pth" model_type = "vit_h" sam = sam_model_registry[model_type](checkpoint=sam_checkpoint) sam.to(device=device) predictor = SamPredictor(sam) # 载入图片 image = cv2.imread('cat_image.jpg') # 替换为实际文件名[^3] predictor.set_image(image) input_point = np.array([[x, y]]) # 输入猫所在位置的坐标(x,y),例如 [100, 200] input_label = np.array([1]) # 设置标签为1表示这是前景物体 masks, scores, logits = predictor.predict( point_coords=input_point, point_labels=input_label, multimask_output=True, ) for i, mask in enumerate(masks): masked_img = image.copy() masked_img[~mask] = 0 # 将非猫部分置零 cv2.imwrite(f'masked_cat_{i}.jpg', masked_img) # 输出每种可能的结果 ``` 以上代码片段演示了如何借助 SAM 对特定目标(如猫)执行精准分割,并允许用户进一步调整以排除不必要的背景干扰。 --- ### 总结 无论是传统方法还是现代深度学习框架下的解决方案,在实际工程实践中都需要针对具体的业务场景灵活运用这些工具和技术手段。上述两个例子分别代表了经典算法与前沿研究方向上的典型应用模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值