tf.image.resize与skimage的resize

2024-01-21 23:18
文章标签 tf image resize skimage

本文主要是介绍tf.image.resize与skimage的resize,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

skimage文档是这样说的

skimage.transform.resize( image , output_shape , order=None , mode=‘reflect’ , cval=0 , clip=True , preserve_range=False , anti_aliasing=None , anti_aliasing_sigma=None )

Performs interpolation to up-size or down-size N-dimensional images.

mode{‘constant’, ‘edge’, ‘symmetric’, ‘reflect’, ‘wrap’}, optional
Points outside the boundaries of the input are filled according to the given mode. Modes match the behaviour of numpy.pad.

numpy文档又是这么说的

‘constant’ (default)
Pads with a constant value.

‘edge’
Pads with the edge values of array.

‘reflect’
Pads with the reflection of the vector mirrored on the first and last values of the vector along each axis.

‘symmetric’
Pads with the reflection of the vector mirrored along the edge of the array.

‘wrap’
Pads with the wrap of the vector along the axis. The first values are used to pad the end and the end values are used to pad the beginning.

pad和插值应该有区别吧???

============================

tf2.0的resize

tf.image.resize(
images, size, method=ResizeMethod.BILINEAR, preserve_aspect_ratio=False,
antialias=False, name=None
)

其中 method 有四种选择:

ResizeMethod.BILINEAR :双线性插值

ResizeMethod.NEAREST_NEIGHBOR : 最近邻插值

ResizeMethod.BICUBIC : 双三次插值

ResizeMethod.AREA :面积插值

这才是正儿八经的用插值来resize图片吧?!!

实验

从实验层面来看一下他们之间的区别究竟有多大。
思路:加载一批图片,分别用上述两种resize方法进行处理,然后算一下他们之间的psnr值看看。

#加载cifar10的测试集
x_test, y_test = get_data_set("test")
#随便整几张图片试试
x_test = x_test[:33]# img = x_test[0,:,:,:]
#
# print(img.shape)
# plt.imshow(img)
# plt.show()
# aa = tf.image.resize(img, [48, 48]).numpy()
# print(aa.shape)
# plt.imshow(aa)
# plt.show()from skimage.transform import resizeX_test = np.array([resize(x, output_shape=(48, 48)) for x in x_test])import math
def get_psnr(img1, img2):mse = np.mean( (img1/1. - img2/1.) ** 2 )if mse < 1.0e-10:return 100PIXEL_MAX = 1return 20 * math.log10(PIXEL_MAX / math.sqrt(mse))#四种方式
bb = [tf.image.ResizeMethod.BILINEAR,tf.image.ResizeMethod.NEAREST_NEIGHBOR,tf.image.ResizeMethod.BICUBIC , tf.image.ResizeMethod.AREA]for j in range(4):for i in range(32):temp = tf.image.resize(x_test[i, :, :, :], [48, 48], method=bb[j]).numpy()psnr = get_psnr(temp,X_test[i, :, :, :])print(psnr,end=" ")print("=====================")

输出

46.669033558302885 48.90798774917477 53.38381232542708 48.43096027380447 46.63530041008276 49.853715847548045 46.97129446274798 57.92736516572543 52.02712480456207 47.9270666009561 56.815827971818976 43.58148330692217 49.15912003347911 45.571104617307476 44.778364129271104 46.13820707579342 43.018938041725974 49.702719907722226 48.09563717071776 49.98946646853693 45.87546487951293 63.99499287231072 53.94231731555267 43.738499959122024 46.908452504151406 44.42300374351233 47.622822312811095 50.28564910040936 45.20506178645428 49.319071870542366 47.76259998082413 55.95695969034264 =====================
26.97628677450534 26.924861715004923 29.183922133559385 28.454948098090075 27.641430200201178 29.73183032295352 25.466182577940355 31.338492508076765 29.9067674657335 26.197798316302723 31.13589159316287 25.056555401591417 28.983519879947536 23.96870655942354 25.427217596503308 26.396676988617553 25.754045363673626 27.128767028700782 28.461873499287837 27.005025244577926 24.871044509277738 25.537881905908407 35.51861682838789 23.738132391790444 28.941631597341658 27.680023619665302 28.389742788850572 28.745888550449724 24.902620199920307 29.115073004421962 29.751666906604072 32.08766152133068 =====================
37.03543857489388 37.259828641504036 40.213764737505635 38.04380796549642 36.7790259503914 39.23595602822592 35.77335658889253 42.27602482590236 40.28042495809771 37.0365490315566 42.2178204137436 35.00559003779734 38.91261259423612 34.711268849468595 35.35611781891313 36.27121114979309 35.65962402278565 37.664839650830196 38.37510414747462 37.376202536896336 36.05599500393482 36.64829305721068 45.38580840924415 34.07303854523669 38.97407018442087 37.5050909468706 39.13560505488175 39.3079174725139 35.70591190864245 38.35261549238907 39.2579847332357 43.88169978322925 =====================
34.77223282063561 34.00181912589067 36.918973301639596 34.3329021393655 34.247488624884085 36.45586961708923 32.32954212272813 38.57978679534951 37.007158514958 34.32080115763002 38.97647966809106 32.45896604574029 35.47081126975141 31.825603643146007 32.64746063172551 33.70869438835973 33.031301832751815 34.430776528882056 35.08218773125719 34.47020053917494 33.410030293674254 32.82951933890276 43.05155492385302 31.716446871714886 36.40419415215108 35.800352782290055 35.61569268275426 36.03531143542608 32.84526522882461 35.80328351242286 37.49832733079886 39.793573612797786 =====================

显然,tf的双线性插值模式的psnr值最大,50左右。我们知道,这个值其实也不低了。我也试了,用skimage的resize处理的图片训练的模型来预测用tf.resize处理的图片。效果也不差。

这篇关于tf.image.resize与skimage的resize的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/631126

相关文章

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

【深度学习 走进tensorflow2.0】TensorFlow 2.0 常用模块tf.config

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。人工智能教程 本篇文章将会教大家如何 合理分配显卡资源,设置显存使用策略。主要使用tf.config模块进行设置。下面我们一起了解下具体用法和例子。 一、指定当前程序使用的 GPU 例如,在一台具有 4 块 GPU 和一个 C

IMAGE LIST

   CImageList就是一个容器,用来存储图片资源,方便这些资源被CListBox,CComboBox,CComboBoxEx,CTabCtrl以及CTreeCtrl,CListCtrl等使用。      要使用CImgeList首先要使用它的create函数:      一般用的比较多的是这一个函数,当然,它还有很多重载,自己可以去翻阅msdn.       BOOL

【vscode】vscode paste image插件设置

本文首发于 ❄️慕雪的寒舍 vscode编辑md文件的时候,如果想插入图片,自带的粘贴只会粘贴到当前目录下,也没有文件重命名,很不友好。 在扩展商店里面有mushan的Paste Image插件,相比自带的,更加友好一点。但是它的配置把我弄糊涂了,简单测试了一下才明白处理的逻辑。 注意,本文编写的是对mushan的Paste Image插件的教程。 首先是安装这个插件,这个不多说

pytorch时空数据处理4——图像转文本/字幕Image-Captionning(二)

pytorch时空数据处理4——图像转文本/字幕Image-Captionning(二) pytorch时空数据处理4——图像转文本/字幕Image-Captionning(二)DatasetInputs to modelCaption LengthsData pipelineEncoderAttentionDecoder代码数据集初始化 create_input_files.py训练 tr

Show,Attend and Tell: Neural Image Caption Generation with Visual Attention

简单的翻译阅读了一下 Abstract 受机器翻译和对象检测领域最新工作的启发,我们引入了一种基于注意力的模型,该模型可以自动学习描述图像的内容。我们描述了如何使用标准的反向传播技术,以确定性的方式训练模型,并通过最大化变分下界随机地训练模型。我们还通过可视化展示了模型如何能够自动学习将注视固定在显着对象上,同时在输出序列中生成相应的单词。我们通过三个基准数据集(Flickr9k,Flickr

Docker Image 命令

文章目录 目录 文章目录 1 . Docker镜像是什么? 2 . 镜像命令详解 docker images docker tag docker pull docker rmi  docker save 总结 1 . Docker镜像是什么? Docker image 本质上是一个 read-only 只读文件, 这个文件包含了文件系统、 源码、库文件、依赖、工具等一些

flutter Image

Flutter中,Image是一个用于显示图片的控件,可以显示网络图片、本地图片以及Asset中的图片。Image控件支持多种常见的图片格式,例如PNG、JPEG、GIF等。 const Image({super.key,required this.image,this.frameBuilder,this.loadingBuilder,this.errorBuilder,this.seman

C#Bitmap和Image之间的关系

Image 类 Image 是一个抽象基类,它定义了所有图像类型的共同属性和方法。它提供了图像处理的通用接口,比如获取图像的尺寸、像素格式、帧数等。Image 类本身不能被实例化,它只是提供了一个通用的框架,具体的图像类型(如位图、图标、元文件等)需要通过继承 Image 类来实现。Image 类提供了一些通用的方法,如 Save(保存图像到文件)、GetThumbnailImage(获取图像的

Image Transformation can make Neural Networks more robust against Adversarial Examples

Image Transformation can make Neural Networks more robust against Adversarial Examples 创新点 1.旋转解决误分类 总结 可以说简单粗暴有效