找回密码
 立即注册
查看: 839|回复: 20

图像处理用 Python 还是 MATLAB?

[复制链接]
发表于 2021-7-4 12:11 | 显示全部楼层 |阅读模式
研究图形学、计算机视觉、非真实感绘制,选择Python还是MATLAB呢?
发表于 2021-7-4 12:20 | 显示全部楼层
感觉Python已经快无所不能,统一天下了……
图像处理的常见任务包括图像显示、图像基本操作(裁剪、翻转、旋转等)、图像分割、分类及特征提取、图像修复和图像识别。而Python作为一种科学编程语言已在日渐普及,在生态系统库中还免费提供了许多最为先进的图像处理工具,因此成为了图像处理的最佳选择。
此处为你搜集了10个常用的图像处理的常用Python库。希望对你有帮助哦~


1. scikit Image


scikit-image是Python的一个开源包,将图片作为numpy数组进行处理。它使算法和实用程序得以用于研究、教育和行业应用领域。即便是对不熟悉Python生态环境的人来说,这个库也十分简单明了。此代码由一个活跃的志愿者团队编写,质量很高且已经审阅。


资源:http://scikit-image.org/docs/stable/user_guide.html


用法


该包作为skimage导入,大多数功能都可在子模块找到。例如:


· 图像过滤


import matplotlib.pyplot as plt %matplotlib inline
from skimage import data,filters
image = data.coins()# ... or any other NumPy array!edges = filters.sobel(image)plt.imshow(edges, cmap='gray')








· 使用match_template函数进行模板匹配








更多示例传送门:
https://scikit-image.org/docs/dev/auto_examples


2. Numpy


Numpy是Python编程的一个核心库,为数组提供支持。图像本质上是包含数据像素点的标准Numpy数组。因此,通过使用基本的NumPy操作,例如切片、掩膜和匹配索引,可以修改图像的像素值。也可以用skimage加载图像,用matplotlib显示图像。


资源:http://www.numpy.org/


用处


使用Numpy来实现图像掩膜。


import numpy as npfrom skimage import dataimport matplotlib.pyplot as plt %matplotlib inline
image = data.camera()type(image)
numpy.ndarray #Image is a numpy array
mask = image < 87image[mask]=255plt.imshow(image, cmap='gray')








3. Scipy


和Numpy一样,scipy是Python的另一个核心模块,可用于图像的基本处理和加工。 特别是子模块scipy.ndimage提供了可在n维NumPy数组上运行的函数。该包目前包括线性和非线性滤波法、二值图像形态学、B样条插值和对象测量等功能。


资源:https://docs.scipy.org/doc/scipy/reference/tutorial/ndimage.html#correlation-and-convolution
用处


使用SciPy的高斯滤波对图片进行模糊处理:


from scipy import misc,ndimage
face = misc.face()blurred_face = ndimage.gaussian_filter(face, sigma=3)very_blurred = ndimage.gaussian_filter(face, sigma=5)
#Resultsplt.imshow(<image to be displayed>)








4. PIL/ Pillow


PIL(Python图像处理库)是一个免费的Python编程语言库,支持打开、处理和保存多种格式的图像文件。但它的发展早已停滞不前,最新一次发布还是在2009年。所幸还有Pillow这个积极开发的PIL分支,而且它安装起来更容易,还可以在所有主操作系统上运行,并支持Python 3。该库包含点操作、使用一组内置卷积内核进行图像过滤以及颜色空间转换这些基本的图像处理功能。


资源:https://pillow.readthedocs.io/en/3.1.x/index.html


用处


使用Pillow中的ImageFilter增强图像:


from PIL import Image, ImageFilter#Read imageim = Image.open( 'image.jpg' )#Display imageim.show()
from PIL import ImageEnhanceenh = ImageEnhance.Contrast(im)enh.enhance(1.8).show("30% more contrast")








更多资源传送门:http://sipi.usc.edu/database/


5. OpenCV-Python


OpenCV(开源计算机视觉库)是计算机视觉应用中使用最为广泛的库之一。OpenCV-Python是OpenCV的python接口。OpenCV-Python不只是因为后台由用C / C ++编写的代码组成而速度快,还因为前端的Python包装器使得编码和部署容易。因此,它成为了计算密集型计算机视觉程序的绝佳选择。


资源:https://github.com/abidrahmank/OpenCV2-Python-Tutorials


用处


下图中,OpenCV-Python在图像融合中使用图像金字塔创建了一个名为‘Orapple’的新型水果。








代码传送门:https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_pyramids/py_pyramids.html#pyramids


6. SimpleCV


SimpleCV也是用于构建计算机视觉应用程序的一个开源框架。使用SimpleCV,可以不必事先了解位深、文件格式、色彩空间就能对几个高性能的计算机视觉库如OpenCV 进行访问。它的学习曲线比OpenCV小得多,正如其宣传语所说,“SimpleCV让计算机视觉变得容易”。SimpleCV的优势在于:


· 即使是初级程序员也可以编写简单的机器视觉测试


· 摄像头、视频文件、图像和视频流都可以互操作


资源:https://simplecv.readthedocs.io/en/latest/


用处








7. Mahotas


Mahotas是Python中另一个计算机视觉和图像处理库,含有过滤和形态学操作这类的传统图像处理功能和兴趣点检测、局部描述符等用于特征计算的现代化计算机视觉功能。接口使用了Python,适合快速开发,但算法是由C ++实现的,并对速度进行了调整。Mahotas库因代码简单且依赖性最小而快速。


资源:https://mahotas.readthedocs.io/en/latest/install.html


用处


Mahotas库靠简单的代码来完成工作。对于“寻找Wally”这一问题,Mahotas解决得很好,且代码最少。


源代码传送门:https://mahotas.readthedocs.io/en/latest/wally.html














8. SimpleITK


ITK或Insight Segmentation and Registration Toolkit是一个开源的跨平台系统,为开发人员提供了一整套用于图像分析的软件工具。其中,SimpleITK是一个建立在ITK之上的简化层,旨在方便它在快速成型、教育、解释语言中的应用。SimpleITK是一个具有大量组件的图像分析工具包,支持一般过滤操作、图像分割和图像配准。SimpleITK本身是用C ++编写的,但可用于包括Python在内的多种编程语言。


资源:http://insightsoftwareconsortium.github.io/SimpleITK-Notebooks/


用处


以下动画是使用SimpleITK和Python可视化严格CT / MR定位过程。


源代码传送门:https://github.com/InsightSoftwareConsortium/SimpleITK-Notebooks/blob/master/Utilities/intro_animation.py






来源:https://github.com/InsightSoftwareConsortium/SimpleITK-Notebooks/blob/master/Utilities/intro_animation.py


9. pgmagick


Pgmagick是GraphicsMagick库基于Python的包装器。GraphicsMagick图像处理系统有时也被称为图像处理的瑞士军刀。它提供了强大高效的工具集和库集,这些集合支持读取、写入和操作的图像格式超过88种,其中包括DPX,GIF,JPEG,JPEG-2000,PNG,PDF,PNM和TIFF等重要格式。


资源


1. Github存储库:https://github.com/hhatto/pgmagick
2. 用户指南:https://pgmagick.readthedocs.io/en/latest/


用处


可使用pgmagick对图像进行的处理操作很有限,包括:


图像缩放 :








边缘提取:








10. Pycairo


Pycairo是一组用于图形库cairo的python包。Cairo是一个用于绘制矢量图形的2D图形库。矢量图形很有趣,在调整大小或变换时它们的清晰度不会受到影响。Pycairo可从Python中调用cairo命令用于cairo。


资源


1. GitHub存储库:https://github.com/pygobject/pycairo
2. 入门指南:https://pycairo.readthedocs.io/en/latest/tutorial.html


用处


Pycairo可用于绘制线条、绘制基本形状和径向渐变:










我们一起分享AI学习与发展的干货
欢迎关注“读芯术”哦~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-7-4 12:22 | 显示全部楼层
其实很对人对python认识不足,说python弱或者慢的,很多都是没有真正了解python,python相当于一个万能插线板,一切C,fortran的成熟类库都可以进行包装,为我所用。并且python的科研环境应该很不错。matlab当然也很强大,但是作为开源程序工作者,当然抵制盗版,推崇开源和分享精神。
这里简单介绍python图像处理的类库,PIL其实只是一般的效果处理库,对像素级的支持并不好,真正科学计算,当然要熟悉numpy,基本数组操作,然后是scipy,里面封装了大量常用数学函数,也包括ndimage一个常规图像处理库,之后是scikit-image,opencv等大而全的图像处理库,以及ITK,VTK等行业内流行的类库,起丰富程度与matlab不相上下。并且这些类库大多底层由C实现,效率也不低。
最后,我顺便推荐一下我自己的开源项目,ImagePy,是一个兼容所有基于Numpy函数的一个通用框架,借助它,可以快速接入功能,自动根据参数生成交互界面,提供友好交互,以下贴图简单介绍:
ImagePy主界面

几何变换

图像匹配

地表重建

三维重建

以上是部分功能展示,希望大家多多支持。
知乎专栏:ImagePy 开源图像处理框架 - 知乎专栏
官网:ImagePy
Github:yxdragon/imagepy
QQ群:596310256 或搜索 ImagePy

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2021-7-4 12:32 | 显示全部楼层
直接去Python图像处理的好处所在
看看就好。
懒得点开的直接看下面的结论:
在批处理或者简单的Python图像处理任务中,采用Python和PIL(Python Image Library)的组合来完成图像处理任务是一个很不错的选择。设想有一个需要对某个文件夹下的所有图像将对比度提高2倍的任务。用Python来做将是十分简单的。当然,我也不得不承认Python在图像处理方面的功能还比较弱,显然还不适合用来进行滤波、特征提取等等一些更为复杂的应用。我个人的观点是,当你要实现这些“高级”的算法的时候,好吧,把它交给MATLAB去完成。但是,如果你面对的只是一个通常的不要求很复杂算法的图像处理任务,那么,Python图像处理应该才是你的最佳搭档。
发表于 2021-7-4 12:36 | 显示全部楼层
验证算法,就用matlab(也有用c++和opencv的),嵌入式处理,就用c/c++,python我没接触过,不说。
发表于 2021-7-4 12:39 | 显示全部楼层
python 包多,但杂。很多包对图像读取成数组的定义还不太一样,比如颜色通道的顺序,比如长宽的顺序。
matlab的优势在于可以用官方的函数完成绝大多数的功能。不过数组索引从1开始有点反人类。。。
通常的算法,这两者都能实现,如果matlab都正好有官方的函数,matlab的代码量会少一些。做数字图像处理,最好还是都熟悉了比较好,一般有个想法自己能很清楚哪个实现起来方便。关键不在于工具,真的
发表于 2021-7-4 12:41 | 显示全部楼层
python,python光加速就有很多方法。
现在matlab是版权软件,美国现在打科技战,有版权的软件能不用就别用,防止那天出境被美国盯上了。
python是开源,可以用c语言来加速,可以使用numba加速,可以使用numpy加速,可以使用cuda显卡加速,可以使用阿里开源mars大规模矩阵加速,你可以用python开发原型,未来做成商业产品,做成c++的动态链接库也很方法,因为python下面的很多算法都是公开的,你可以看到源代码,像opencv里的图像处理函数也是可以看到源代码的。
另外python可以做数据分析,深度学习,web开发,web json接口,爬虫,数据库访问,访问开放数据集,科学计算,信号处理,统计分析,图表显示,FPGA开发,嵌入式开发,服务器运维,pyqt界面,等等等。。。想当年python只能在linux服务器做脚本,真是可怜到无人问津。
用matlab可以使用开源版的Octave,python可以调用Octave,如果想要matlab那种方便显示变量,可以使用 python的spider做为开发工具。
发表于 2021-7-4 12:45 | 显示全部楼层
4年前可能matlab
现在只能选python
发表于 2021-7-4 12:50 | 显示全部楼层
都好用,主要看你的用途了。
    搞科研的话,看SOTA用什么你就选什么。
个人感觉差不多2015年以前的topic 有很大一部分是matlab 写的,你想找python的代码都没有。比如,如果你想用graph matching,目前比较好用的代码都是matlab的。
2015年以后,以深度学习为代表的topic,python 肯定是主流。这个就不用我细说了。
虽然matlab 也有自己的深度学习平台 matconvnet,不过因为种种原因已经不更新了。以前用matcaffe 或者 matconvnet 的人也都逐渐转向 TF或者pytorch。
2. 你不搞科研,但是想快速验证一个算法好不好用。
个人绝对推荐matlab。
matlab 最大的优点就是优质的第一方函数。别老说什么opencv 有什么狗屁底蕴(再说了,opencv 好用跟python 有个屌关系,matlab也能用opencv),双方各有所长。比如 opencv 里面的superpixel 包含SLIC 和SEED,而matlab 只有 SLIC。 但是matlab 有3D 2D 两种实现,opencv 只有2D的。你说说谁好用???
opencv 自带的 grabcut 只能用 bounding box 和鼠标画的曲线作为输入,而matlab 的grabcut 可以用任意mask 作为输入。你说说谁好用???(其实效果最好的是powerpoint版本的grabcut。。。)
3. 你想落地的话,我只写过matlab 给别人用。
matlab GUI 从开始学到把界面写出来,我一共用了一天。极其简单,极其无脑。。。
当然,麻烦的地方主要是如何把matlab 编译成exe。费劲,但也不是不能干。
python 我就不知道了。








%%吐槽一个对matlab 不熟悉但是还总是要喷matlab 的大哥%%
@Destine 我并没有人身攻击的意思,只是总结一下,让你看看你自己是多么的不懂matlab。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
大哥:“我确实没有关注过matlab对linux的支持,因为我很少看到有人在linux上装matlab。但是用matlab的cv库是需要掏钱的,并且你也说了那是2015年的,这之间matlab对open cv 的更新到了什么程度我不知道,但绝对不如python快吧,再退一步,cv可以在matlab上用,但是对cv的社区支持malab能比上python么?”
我:matlab 很久以来就是Linux win mac 三平台支持的。opencv3 安装opencv_contrib的时候可以获得所有接口。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
大哥:“学校会把matlab包括里面的库全部买了么?如果没有的话怎么办?matlab的库更新有python快么?视觉领域matlab的库有python多么?直接在社区下载方便还是每次通过license得到方便?如果你想做个项目,需要参考别人代码,python容易找到还是matlab容易?”
我:学校还真不会把所有库买了,没有的话,上面不是有opencv吗。。。。matlab 库更新很快没半年一个新版本,有的时候比opencv 反应还要快。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
大哥:“既然是matlab和python的比较,就说python的社区支持比matlab强大太多了吧,不是说matlab太差,还有论文上面的,当然有人用matlab做,但是相对于python实在是太少了,把matlab当成单位1python可能是100,所以我说两者比较选python。我一直的意思是python在图像处理领域总体比matlab好用,不是说matlab太差,当然,我说的内存管理是matlab的硬伤。”
我:没有调查过的数据就算了把。github 搜“image processing”, python 5200个repo,matlab 2700; 搜“computer vision” python +jupyter 5000左右,matlab 1700 。我并不认为 python : matlab 是100:1.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
大哥:“第一,matlab启动的时候把所有内建都导入了,他的内建多大啊。现在最新版本的都超过10个g了吧,并且每次开机会扫描所有的预设路径下文件,后续每次做一次项目都要加一次路径,最后不想路径太多拖慢速度还得一个个删吧
2,matlab的矩阵存储有上限,并且特别容易out of memory,在大尺度图像处理上面简直灾难
3,matlab在处理循环多慢你也知道吧,否则你怎么会去用mex呢?”


我: 1, matlab是一个IDE,python 是一种语言。python 的IDE Pycharm的启动不会比matlab快。本人的matlab 和pycharm 启动都是十秒左右。另外,你是完全不懂matlab啊。。。“把所有内建都导入了”我真是无力吐槽, 人家不是把"库"加载了,人家是把"路径"加载了,路径是字符串,知道不,能有多大? 自己 在matlab里面打 path,有多少字符,就多大。。。
2. matlab 矩阵有上限,python 就没有了?内存就那么大。另外你是不是不知道有个东西叫sparse可以创建稀疏矩阵
3. matlab 有个东西叫bsxfun 和cellfun,比for循环快1000倍左右,这是非常常见的matlab 用法。你是不是也不知道?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
大哥:“还有你说的每次导入路径,编程的时候没有那么多精力一次次去把自己需要的文件和包在path里面导入吧,并且在这次导入后下次可能还要去掉,如果project太大的时候简直把人逼疯。”
我: 来,把这行代码加到你代码的第一行:addpath(genpath('Root_Dir')); 如果你这个都不知道的话,就别妄加评论matlab吧。matlab 可能好用,也可能不好用,但是你只属于不会用~~~
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
大哥:“你搜一下cv再看差距多少啊,分享的开源代码差这么多还说五五开么,现在图像处理基本上说的都是机器视觉,在这一领域我真的觉得Matlab已经日薄西山了,大多数都开始转向用python不信未来看看吧,cv领域到底以后主流是python还是matlab”


我: 我都用,matlab 和python 都用。搞科研的人这两个工具都应该会。未来的趋势不是谁都能看得出的,尤其是那种对现在的状况不了解的人。
发表于 2021-7-4 12:53 | 显示全部楼层
习惯使用python。Python提到图像处理第一个想到的库就是PIL,全称Python Imaging Library Python,图像处理类库,它提供了大量的图像操作,比如图像缩放,裁剪,贴图,模糊等等。
具体可以看看这篇文章,基本三行代码就可以搞定一个效果处理。
python之图像处理
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-23 19:12 , Processed in 0.099420 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表