merge_SocAndSalicon

import os
import cv2
import numpy as np
import shutil

soc_root_dir = '/disk3/lilong/salient_instance/SOC6K/'
#Sets = ['ValSet', 'TrainSet', 'TestSet'] # 600, 3600, 600
#Sets = ['ValSet', 'TrainSet']
Sets = ['TestSet']

soc_all_Imgs_dir = [os.path.join(soc_root_dir, '{}/Instance_gt/gt'.format(Set)) for Set in Sets]

fixationDir = '/disk3/lilong/coco_2014/fixation_maps_org'
imgDir = '/disk3/lilong/salient_instance/SOC6K'

#outputDir = '/disk3/lilong/soc_rank_saliency/train_val'
outputDir = '/disk3/lilong/soc_rank_saliency/test'

if not os.path.exists(outputDir):
    os.mkdir(outputDir)

fix_lists = os.listdir(fixationDir)

soc_img_list = [[os.path.join(soc_imgs_dir, soc_img_name) for soc_img_name in os.listdir(soc_imgs_dir)]
                for soc_imgs_dir in soc_all_Imgs_dir]
soc_img_list = [img for img_list in soc_img_list for img in img_list]

for soc_img_dir in soc_img_list:
    soc_img_name = soc_img_dir.split('/')[-1]

    if soc_img_name.split('_')[0] == 'COCO':
        fix_img_path = os.path.join(fixationDir, '{}.png'.format(soc_img_name[:-4]))
        fix_img = cv2.imread(fix_img_path)[:, :, 0]

        assert fix_img is not None

        labelMap = np.zeros(fix_img.shape)

        soc_img = cv2.imread(soc_img_dir)
        if soc_img.sum() == 0:
            continue
        soc_img[soc_img != 255] = 0
        soc_img[soc_img == 255] = 1
        soc_img_schannel = soc_img[:, :, 0]*4 + soc_img[:, :, 1]*2 + soc_img[:, :, 2]
        instances = np.unique(soc_img_schannel)[1:].tolist()
        for instance in instances:
            labelMask = soc_img_schannel == instance
            fix_density = (fix_img[labelMask] == 255).sum()
            soc_img_schannel[labelMask] = fix_density
        instances_fixDensity = np.unique(soc_img_schannel)[1:].tolist()
        if len(instances_fixDensity) == 1:
            continue
        for i in range(0, len(instances_fixDensity)):
            rank = int(255./len(instances_fixDensity)*(i+1))
            labelMask = soc_img_schannel == instances_fixDensity[i]
            soc_img_schannel[labelMask] = rank

        out_dir = os.path.join(outputDir, 'gt/{}.png'.format(soc_img_name[:-4]))
        cv2.imwrite(out_dir, soc_img_schannel)

        img_dir = os.path.join(imgDir, '{}/Imgs/{}.jpg'.format(soc_img_dir.split('/')[-4],
                                                               soc_img_dir.split('/')[-1].split('.')[0]))
        img_out_dir = os.path.join(outputDir, 'imgs/{}.jpg'.format(soc_img_name.split('.')[0]))
        shutil.copyfile(img_dir, img_out_dir)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
-- coding: utf-8 -- import arcpy arcpy.env.overwriteOutput = True # 输入参数 input_feature_class = arcpy.GetParameterAsText(0) # 输入要素类 join_feature_class = arcpy.GetParameterAsText(1) # 连接要素类 output_feature_class = arcpy.GetParameterAsText(2) # 输出要素类 join_fields = arcpy.GetParameterAsText(3) # 连接字段 merge_fields = arcpy.GetParameterAsText(4) # 合并字段 min_area = arcpy.GetParameter(5) # 最小面积 # 创建空间连接 arcpy.SpatialJoin_analysis(input_feature_class, join_feature_class, output_feature_class, "JOIN_ONE_TO_MANY", "", "", "INTERSECT") # 创建输出要素类的字段列表 field_list = [f.name for f in arcpy.ListFields(output_feature_class)] # 创建合并字段的字典 merge_dict = {} # 遍历输出要素类中的要素 with arcpy.da.UpdateCursor(output_feature_class, field_list) as cursor: for row in cursor: # 如果要素面积大于最小面积,则进行合并 if row[0] > min_area: # 创建合并字段的键值 merge_key = tuple([row[field_list.index(f)] for f in merge_fields.split(";")]) # 如果合并字段的键值不存在,则添加到字典中 if merge_key not in merge_dict: merge_dict[merge_key] = [] # 将当前要素的连接字段值添加到字典中 join_values = [row[field_list.index(f)] for f in join_fields.split(";")] merge_dict[merge_key].append(join_values) # 删除不符合条件的要素 else: cursor.deleteRow() # 遍历合并字段的字典,将连接字段的值合并并更新到输出要素类中 with arcpy.da.UpdateCursor(output_feature_class, merge_fields.split(";")) as cursor: for row in cursor: merge_key = tuple(row) if merge_key in merge_dict: join_values = merge_dict[merge_key] join_values = ["/".join([str(v) for v in j]) for j in join_values] row = tuple(join_values) cursor.updateRow(row)运行错误:IndentationError: unexpected indent (空间连接.py, line 18) 执行(空间连接多对一)失败。请改正代码
05-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值