图像的重定义大小,图像的缩扩,图像的旋转:

 from skimage import transform,data
import matplotlib.pyplot as plt
img = data.camera()
print(img.shape)
plt.subplot(221)
plt.imshow(img)
plt.subplot(222)
plt.imshow(transform.resize(img,(64,64)))
plt.subplot(223)
plt.imshow(transform.rescale(img,0.2))
plt.subplot(224)
plt.imshow(transform.rotate(img,30,resize=True))
plt.show()

产生高斯金字塔

 import numpy as np
import matplotlib.pyplot as plt
from skimage import data,transform
image = data.astronaut() #载入宇航员图片
pyramid = transform.pyramid_gaussian(image, downscale=2) #产生高斯金字塔图像
#pyramid = transform.pyramid_laplacian(image, downscale=2)
#共生成了log(512)=9幅金字塔图像,加上原始图像共10幅,pyramid[0]-pyramid[1]
i = 1
for p in pyramid:
plt.subplot(2,5,i)
i+=1
#p[:,:,:]*=255
plt.title(p.shape)
plt.imshow(p)
plt.show()

gamma调整原理:I=Ig 如果gamma>1, 新图像比原图像暗。如果gamma<1,新图像比原图像亮

log对数调整I=log(I)

对比度是否偏低判断:exposure.is_low_contrast(img)

 from skimage import data, exposure, img_as_float
import matplotlib.pyplot as plt
image = img_as_float(data.moon())
gam1= exposure.adjust_gamma(image, 4) #调暗
gam2= exposure.adjust_gamma(image, 0.7) #调亮
gam3= exposure.adjust_log(image) #对数调整
plt.figure('adjust_gamma',figsize=(10,10))
plt.subplot(141)
plt.imshow(image)
plt.subplot(142)
plt.imshow(gam1)
plt.subplot(143)
plt.imshow(gam2,plt.cm.gray)
plt.subplot(144)
plt.imshow(gam3)
plt.show() #原理:I=Ig
result=exposure.is_low_contrast(gam1)
result

调整图片强度,不是很懂参数...

 import numpy as np
from skimage import exposure
image = data.moon()
mat=exposure.rescale_intensity(image,out_range=(0,100))
plt.subplot(121)
plt.imshow(mat)
print(image)
print(mat)
mat1=exposure.rescale_intensity(image, in_range=(0, 200))
plt.subplot(122)
plt.imshow(mat1)
print(mat1.min())
print(mat1)

绘制直方图

 from skimage import data
import matplotlib.pyplot as plt
img=data.camera()
plt.figure("hist")
arr=img.flatten()
n, bins, patches = plt.hist(arr, bins=256, normed=1,facecolor='red')
plt.show()

彩色图片三通道直方图:

 from skimage import data
import matplotlib.pyplot as plt
img=data.astronaut()
ar=img[:,:,0].flatten()
plt.hist(ar, bins=256, normed=1,facecolor='r',edgecolor='r',hold=1)
ag=img[:,:,1].flatten()
plt.hist(ag, bins=256, normed=1, facecolor='g',edgecolor='g',hold=1)
ab=img[:,:,2].flatten()
plt.hist(ab, bins=256, normed=1, facecolor='b',edgecolor='b')
plt.show()

直方图均衡化exposure.equalize_hist(img)

对图像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩,从而扩展取值的动态范围,提高了对比度和灰度色调的变化,使图像更加清晰。

 from skimage import data,exposure
import matplotlib.pyplot as plt
img=data.moon()
plt.figure("hist",figsize=(8,8)) arr=img.flatten()
plt.subplot(221)
plt.imshow(img,plt.cm.gray) #原始图像
plt.subplot(222)
plt.hist(arr, bins=256, normed=1,edgecolor='None',facecolor='red') #原始图像直方图 img1=exposure.equalize_hist(img)
arr1=img1.flatten()
plt.subplot(223)
plt.imshow(img1,plt.cm.gray) #均衡化图像
plt.subplot(224)
arr1*=255
plt.hist(arr1, bins=256, normed=1,edgecolor='None',facecolor='red') #均衡化直方图 plt.show()

图像滤波:

平滑滤波,用来抑制噪声;微分算子,可以用来检测边缘和特征提取。

sobel、roberts、scharr、prewitt、canny算子

gabor、gaussian、median滤波

水平、垂直边缘检测

正负交叉边缘检测

 from skimage import data,filters,feature
import matplotlib.pyplot as plt
from skimage.morphology import disk
img = data.camera()
edges = filters.sobel(img)
edges = filters.roberts(img)
edges = filters.scharr(img)
edges = filters.prewitt(img)
edges = feature.canny(img,sigma=3)
edges,filt_imag = filters.gabor(img, frequency=0.5)
edges = filters.gaussian(img,sigma=5)
edges = filters.median(img,disk(9))
edges = filters.sobel_h(img)
#水平边缘检测:sobel_h, prewitt_h, scharr_h
#垂直边缘检测: sobel_v, prewitt_v, scharr_v
edges = filters.roberts_neg_diag(img)
edges = filters.roberts_pos_diag(img)
plt.imshow(edges,plt.cm.gray)

图像阈值判断与分割的各种方法:

 from skimage import data,filters
import matplotlib.pyplot as plt
image = data.camera()
thresh = filters.threshold_otsu(image)
thresh = filters.threshold_yen(image)
thresh = filters.threshold_li(image)
thresh = filters.threshold_isodata(image) dst =(image <= thresh)*1.0 #根据阈值进行分割
#dst =filters.threshold_adaptive(image, 31,'mean')
plt.subplot(121)
plt.title('original image')
plt.imshow(image,plt.cm.gray)
plt.subplot(122)
plt.title('binary image')
plt.imshow(dst,plt.cm.gray)
plt.show()

图形的绘制,与颜色。有各种各样的图形啊...

 from skimage import draw,data
import matplotlib.pyplot as plt
img=data.chelsea()
rr, cc=draw.ellipse(150, 150, 30, 80) #返回像素坐标
draw.set_color(img,[rr,cc],[255,0,0])
plt.imshow(img,plt.cm.gray)

图像的膨胀,腐蚀

 from skimage import data
import skimage.morphology as sm
import matplotlib.pyplot as plt
img=data.checkerboard()
dst=sm.dilation(img,sm.square(5)) #用边长为15的正方形滤波器进行膨胀滤波
dst1=sm.erosion(img,sm.square(5)) #用边长为5的正方形滤波器进行膨胀滤波
plt.figure(figsize=(8,8))
plt.subplot(131)
plt.imshow(img,plt.cm.gray)
plt.subplot(132)
plt.imshow(dst,plt.cm.gray)
plt.subplot(133)
plt.imshow(dst1,plt.cm.gray)
#找到像素值为1的点,将它的邻近像素点都设置成这个值。1值表示白,0值表示黑,因此膨胀操作可以扩大白色值范围,压缩黑色值范围。一般用来扩充边缘或填充小的孔洞
#将0值扩充到邻近像素。扩大黑色部分,减小白色部分。可用来提取骨干信息,去掉毛刺,去掉孤立的像素。

图像开运算,图像闭运算:

 from skimage import io,color,data
import skimage.morphology as sm
import matplotlib.pyplot as plt
img=color.rgb2gray(data.camera())
dst=sm.opening(img,sm.disk(9)) #用边长为9的圆形滤波器进行膨胀腐蚀滤波
dst1=sm.closing(img,sm.disk(9)) #用边长为5的圆形滤波器进行腐蚀膨胀滤波
plt.figure(figsize=(10,10))
plt.subplot(131)
plt.imshow(img,plt.cm.gray)
plt.subplot(132)
plt.imshow(dst,plt.cm.gray)
plt.subplot(133)
plt.imshow(dst1,plt.cm.gray)

白帽(white-tophat)。黑帽(black-tophat)。

 from skimage import io,color
import skimage.morphology as sm
import matplotlib.pyplot as plt
img=color.rgb2gray(data.camera())
dst=sm.white_tophat(img,sm.square(21)) #将原图像减去它的开运算值,返回比结构化元素小的白点
dst1=sm.black_tophat(img,sm.square(21)) #将原图像减去它的闭运算值,返回比结构化元素小的黑点,且将这些黑点反色。
plt.figure('morphology',figsize=(10,10))
plt.subplot(131)
plt.imshow(img,plt.cm.gray)
plt.subplot(132)
plt.imshow(dst,plt.cm.gray)
plt.subplot(133)
plt.imshow(dst1,plt.cm.gray)

python的数字图像处理学习(2)的更多相关文章

  1. python的数字图像处理学习(3)

    高级滤波: from skimage import data,color,data_dir import matplotlib.pyplot as plt from skimage.morpholog ...

  2. python的数字图像处理学习(1)

    导入原有的测试图片,测试图片路径,和一些方法,显示出测试图像,测试图像路径. from skimage import io,data,data_dir img_rgb=data.chelsea() i ...

  3. 【笔记】基于Python的数字图像处理

    [博客导航] [Python相关] 前言 基于Python的数字图像处理,离不开相关处理的第三方库函数.搜索网络资源,列出如下资源链接. Python图像处理库到底用哪家 python计算机视觉编程— ...

  4. 数字图像处理学习笔记之一 DIP绪论与MATLAB基础

    写在前面的话 数字图像处理系列的学习笔记是作者结合上海大学计算机学院<数字图像处理>课程的学习所做的笔记,使用参考书籍为<冈萨雷斯数字图像处理(第二版)(MATLAB版)>,同 ...

  5. MATLAB数字图像处理学习笔记

    我们都知道一幅图片就相当于一个二维数组,可以用一个矩阵来表示,而MATLAB可以说就是为矩阵运算而生的,所以学习图像处理,学习MATLAB势在必行! 一. MATLAB基础知识 1. 读取图像 %im ...

  6. 初始----python数字图像处理--:环境安装与配置

    一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因 ...

  7. 数字图像处理(一)之灰度转换和卷积python实现

    使用Python实现数字图像处理中如下功能: 彩色图像转成灰度图像 实现图像的相关&卷积操作 实现图像的高斯核卷积 使用的库和python版本如下: imageio:2.9.0 用于读取磁盘中 ...

  8. python数字图像处理(17):边缘与轮廓

    在前面的python数字图像处理(10):图像简单滤波 中,我们已经讲解了很多算子用来检测边缘,其中用得最多的canny算子边缘检测. 本篇我们讲解一些其它方法来检测轮廓. 1.查找轮廓(find_c ...

  9. python数字图像处理(1):环境安装与配置

    一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因 ...

随机推荐

  1. js navigator对象

    原文:https://www.cnblogs.com/huyihao/p/6003110.html Navigator 对象包含有关浏览器的信息. 很多时候我们需要在判断网页所处的浏览器和平台,Nav ...

  2. am start的总结,-d参数的总结,以及python中传递内容包含中文及特殊字符&的解决方案

    一.am start的内容的整理 主要包含以下内容:am start的常规操作及参数的含义,-d 参数的含义,以及如何在APK中设置参数获取 使用命令如下:adb shell am start -n ...

  3. 并行网络爬虫(C++实现)

    step1 使用socket编程技术,利用http协议,抽取网页中的url,实现简单的爬虫. socket int socket (int domain, int type, int protocol ...

  4. 如何将python中的List转化成dictionary

    问题1:如何将一个list转化成一个dictionary? 问题描述:比如在python中我有一个如下的list,其中奇数位置对应字典的key,偶数位置为相应的value list : ['品牌', ...

  5. gearman的持久化,以mysql的方式

    1.为什么要持久化? gearman的job server中的工作队列存储在内存中,一旦服务器有未处理的任务时重启或者宕机,那么这些任务就会丢失.持久化存储队列可以允许添加后台任务,并将其存储在外部的 ...

  6. datepicker动态初始化

    datepicker 初始化动态表单的input,需要调用jquery的on方法来给未来元素初始化. //对动态添加的时间文本框进行动态初始化 $('table').on("focus&qu ...

  7. Django——模板语言相关内容

    Django模板语言相关内容   Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} ...

  8. json等序列化模块 异常处理

    今日学习内容如下: 1.序列化模块 什么叫序列化——将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给? 现 ...

  9. centos7+nginx+rtmp+ffmpeg搭建流媒体服务器

    1.安装前需要的工具 #net-tool 查本地IP #wget 下载安装包 #unzip 解压zip包 #gcc gcc-c++ perl 编译软件包用 yum install -y net-too ...

  10. PAT 1011 A+B和C (15)(C++&JAVA&Python)

    1011 A+B和C (15)(15 分) 给定区间[-2^31^, 2^31^]内的3个整数A.B和C,请判断A+B是否大于C. 输入格式: 输入第1行给出正整数T(<=10),是测试用例的个 ...