人体姿态估计预处理——测试获得六个尺度

https://blog.csdn.net/qq_28168421/article/details/53406659

https://www.cnblogs.com/YiXiaoZhou/p/6757165.html

 测试获得六尺度的注意点 :

1、六个尺度是对原图像,就是一开始的图像未被变成256*256的改变。

2、在转换的过程中,需要得到仿射变换矩阵。

-------------------------------------------------------------------------------
-- Cropping-------这个函数也是多尺度测试会用到的
-------------------------------------------------------------------------------

function crop(img, center, scale, rot, res)
----------测试时
----------center:local center = a['center'][idxs[i]未被处理的真实图像
----------scale:缩放后的值 local original_scale = a['scale'][idxs[i]];scale = ----------original_scale*factor
    -- Crop function tailored to the needs of our system. Provide a center
    -- and scale value and the image will be cropped and resized to the output
    -- resolution determined by res. 'rot' will also rotate the image as needed.
---------下面这个代码是获得从(0,0),(256,256)分别原图中应该所在的区域左上和左下坐标
    local ul = transform({1,1}, center, scale, 0, res, true)
    local br = transform({res,res}, center, scale, 0, res, true)
----------获得padding
    local pad = math.floor(torch.norm((ul - br):float())/2 - (br[1]-ul[1])/2)
    if rot ~= 0 then
        ul = ul - pad
        br = br + pad
    end

    local newDim,newImg,ht,wd

    if img:size():size() > 2 then
----定义原图被框出来的大小尺寸
        newDim = torch.IntTensor({img:size()[1], br[2] - ul[2], br[1] - ul[1]})
        newImg = torch.zeros(newDim[1],newDim[2],newDim[3])
------原图的高和宽
        ht = img:size()[2]
        wd = img:size()[3]
    else
        newDim = torch.IntTensor({br[2] - ul[2], br[1] - ul[1]})
        newImg = torch.zeros(newDim[1],newDim[2])
        ht = img:size()[1]
        wd = img:size()[2]
    end
---------获取新图包含人的宽的左下角坐标和右下角的坐标;左上角和右上角的坐标。
    local newX = torch.Tensor({math.max(1, -ul[1]+1), math.min(br[1], wd) - ul[1]})
    local newY = torch.Tensor({math.max(1, -ul[2]+1), math.min(br[2], ht) - ul[2]})
---------获取旧图包含人宽左下角坐标和右下角的坐标;左上角和右上角的坐标。
    local oldX = torch.Tensor({math.max(1, ul[1]+1), math.min(br[1], wd)})
    local oldY = torch.Tensor({math.max(1, ul[2]+1), math.min(br[2], ht)})

    if newDim:size()[1] > 2 then
            ---------将旧图中包含人的像素赋值给新图
------------------img:sub(dim1star=第一维开始的地址,dim1end=第一维结束的地址,dim2star,dim2end),
newImg:sub(1,newDim[1],newY[1],newY[2],newX[1],newX[2]):copy(img:sub(1,newDim[1],oldY[1],oldY[2],oldX[1],oldX[2]))
    else
        newImg:sub(newY[1],newY[2],newX[1],newX[2]):copy(img:sub(oldY[1],oldY[2],oldX[1],oldX[2]))
    end

    if rot ~= 0 then
        newImg = image.rotate(newImg, rot * math.pi / 180, 'bilinear')
        if newDim:size()[1] > 2 then
            newImg = newImg:sub(1,newDim[1],pad,newDim[2]-pad,pad,newDim[3]-pad)
        else
            newImg = newImg:sub(pad,newDim[1]-pad,pad,newDim[2]-pad)
        end
    end
-----------裁剪新图newImg为res=256大小
    newImg = image.scale(newImg,res,res)
    return newImg
end

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值