以Unet网络为例

  • 1、背景
  • 2、添加灰度条
  • 3、思路与代码

1、背景

在进行图像分割预测的时候,我们输入网络的图片往往是正方形的(512x512,224x224甚至更小),那么预测出图片的大小也和输入网络的图片大小一样,是正方形的,怎么让预测出来的图片和原始图片长宽比例相同呢?知道我关注了b站up主Bubbliiing,才把这个问题解决,这里特别感谢。他的代码与思路如下:

2、添加灰度条

由于在图片进入到网络之前,往往需要裁剪或者resize,那么对于原始图片是长方形的,如果裁剪,则会丢失信息,如果resize则会失真,因此添加灰度条是保证图片既不会失真也不会丢失信息的一个方法。

    def letterbox_image(self ,image, size):image = image.convert("RGB")iw, ih = image.sizew, h = sizescale = min(w/iw, h/ih)nw = int(iw*scale)nh = int(ih*scale)image = image.resize((nw,nh), Image.BICUBIC)new_image = Image.new('RGB', size, (128,128,128))new_image.paste(image, ((w-nw)//2, (h-nh)//2))return new_image,nw,nh

3、思路与代码

第一步:进行原始图片的备份,并计算图片的高和宽。
第二步:对输入进来的图片添加灰度条,其本质是不失真的resize。
第三步:对输入图片进行归一化,所有像素点全部除以255,同时加上batch_size维度,并进行transpose。
第四步:图片传入网络进行预测,对预测的结果进行permute操作将通道数转到最后一维。
第五步:对预测结果取一个softmax操作,取出每个像素点对应最大概率值的种类。
第六步:对最终的预测结果进行截取,将灰条部分截取掉。
第七步:判断每个像素点的种类,对每个像素点分配一个特定的颜色。
第八步:将得到的分割图像转化为image并进行resize,与原始图片进行复合即可。

下面看代码:

 #---------------------------------------------------##   检测图片#---------------------------------------------------#def detect_image(self, image):# 进行原始图片的备份old_img = copy.deepcopy(image)orininal_h = np.array(image).shape[0]orininal_w = np.array(image).shape[1]image, nw, nh = self.letterbox_image(image,(self.model_image_size[1],self.model_image_size[0]))images = [np.array(image)/255]images = np.transpose(images,(0,3,1,2))with torch.no_grad():images = Variable(torch.from_numpy(images).type(torch.FloatTensor))if self.cuda:images =images.cuda()pr = self.net(images)[0]pr = F.softmax(pr.permute(1,2,0),dim = -1).cpu().numpy().argmax(axis=-1)pr = pr[int((self.model_image_size[0]-nh)//2):int((self.model_image_size[0]-nh)//2+nh), int((self.model_image_size[1]-nw)//2):int((self.model_image_size[1]-nw)//2+nw)]seg_img = np.zeros((np.shape(pr)[0],np.shape(pr)[1],3))for c in range(self.num_classes):seg_img[:,:,0] += ((pr[:,: ] == c )*( self.colors[c][0] )).astype('uint8')seg_img[:,:,1] += ((pr[:,: ] == c )*( self.colors[c][1] )).astype('uint8')seg_img[:,:,2] += ((pr[:,: ] == c )*( self.colors[c][2] )).astype('uint8')image = Image.fromarray(np.uint8(seg_img)).resize((orininal_w,orininal_h))if self.blend:image = Image.blend(old_img,image,0.7)return image

代码选自这里。

问题1、图像分割预测时原始图片大小与预测图片大小不一致相关推荐

  1. 【pytorch】自己实现精简版YOLOV3【三】,YOLOV3输入图片预处理:输入图片缩放及将生成预测框还原至原图

    接上篇博文: Yolov3网络的输入默认为416x416,然后待检测的图片不总是416x416,这就产生了如何将待检测图片,在不破坏特征的情况下缩放至416x416,并对应在网络产生预测框后,如何将4 ...

  2. 计算机原始图片大全,怎么判定图片是否PS过?又该如何找到原始图片?

    网上购物,或是查找信息时都听说过"有图有真相",不过在很多时候,有图不一定就有真相.因为现在很多图片都会经过PS,很多时候显现在我们面前的并非是真实.原始的图片. 那么对于一张图片 ...

  3. C#图片截取压缩(百分比压缩/大小压缩)实现代码

    原文链接:http://www.jb51.net/article/33622.htm   脚本之家 为了娱乐写了个截取图片和压缩图片你的小工具:按照百分比压缩/制定大小压缩等等,感兴趣的朋友可以了解下 ...

  4. 如何在线压缩png图片?png压缩图片大小的方法介绍

    压缩PNG图片大小的优点 随着数字化时代的发展,PNG格式已成为一种常见的图片格式.然而,由于高分辨率.高色深等原因,PNG图片通常具有较大的文件体积,导致在传输.存储和网页加载等方面会产生不必要的负 ...

  5. 前端性能优化:使用媒体查询加载指定大小的背景图片

    日期:2013-7-8  来源:GBin1.com 直到CSS @supports被广泛支持,CSS媒体查询的使用接近于CSS中写逻辑控制.我们经常用CSS媒体查询来根据设备调整CSS属性(通常根据屏 ...

  6. android 控件宽度自适应_Android中让图片自适应控件的大小的方法

    这就需要把.png格式的图片转成.9.png格式,.9.png就是后缀名.在安装Android-SDK时自带了可以把.png格式的图片编辑后保存就变成了.9.png格式.这个文件存放在你所安装的And ...

  7. 基于layer的图片弹出展示,默认原大小展示。图片太大则等比例缩小

    /**** html:<img src="img/1.jpg" onclick="showimg('img/1.jpg');">* 图片弹出展示,默 ...

  8. 图片大大了怎么修改大小KB不改变尺寸

    我们在平时提交一些报名资料时,都需要上传证件照,而照片除了有尺寸要求之外,对图片的大小也就是多少KB也有要求,那么如何才能减小图片的大小达到上传要求呢?换言之有哪些无损压缩图片的方法呢? 如果是手机里 ...

  9. android设置图片亮度分10档,批处理图片同时调整图片亮度批处理图的大小压缩图片裁边(6页)-原创力文档...

    使用Microsoft Office Picture Manager的最大好处是可以批处理文件:可同时处理一批图片的亮度.对比度.调整尺寸大小(压缩图片).旋转图片等,一气呵成. 批处理图片实例操作: ...

  10. 【转】c# 图片压缩 (非图片大小变化)----使得显示效果差点,但是图片占用空间需要变小

    转自:http://bbs.csdn.net/topics/270043488 c# 图片压缩 (非图片大小变化)----使得显示效果差点,但是图片占用空间需要变小. [问题点数:60分,结帖人lin ...

最新文章

  1. bootstrap-table对前台页面表格的支持
  2. C++ XML解析之TinyXML篇[转]
  3. 用IJ和gradle启动elasticsearch5.4.3
  4. php页面空白如何解决,php页面空白怎么回事 php出现空白页的解决方法
  5. 二项分布 , 多项分布, 以及与之对应的beta分布和狄利克雷分布
  6. *【HDU - 5711】Ingress(tsp旅行商问题,优先队列贪心,状压dp,floyd最短路,图论)
  7. OpenCV像素二位数组数据(矩阵)生成图片
  8. WIN10中如何关闭Windows Search
  9. KCG-VISION:简介(一款快速开发机器视觉的软件)
  10. python死循环_python中死循环
  11. 【云片网】发送短信验证代码事例
  12. 编码器如何推流给虎牙直播平台
  13. No signing certificate “iOS Distribution“ found No “iOS Distribution“ signing certificate matching
  14. 关于Scrapy爬虫框架中meta参数的使用示例演示(下)
  15. 华为OD机试 - 租车骑绿岛
  16. OpenVINO部署Mask-RCNN实例分割网络
  17. 【第1131期】对于网络爬虫技术的攻与防
  18. Switch开关控件.
  19. 深度学习在智能交通的应用--综述
  20. MySQL简介及安装教程

热门文章

  1. main函数中argc和argc参数解释
  2. 总结01-bms-molecular-translation分子翻译大赛
  3. Confluence 6 workbox 的位置
  4. windows库的创建和使用:静态库+动态库
  5. 《Linux/UNIX OpenLDAP实战指南》——1.4 OpenLDAP目录条目概述
  6. Linux 配置rdate时间服务器方法
  7. linux早期内核的khttpd服务器--策略污染机制
  8. linux下安装rabbitmq以及在spring中进行集成
  9. ubuntu安装dockers和images:dvwa
  10. 解决修改完系统默认python版本后yum不可用的问题!!!!!!