Python 实现图像逐像素点取邻域数据

图像比较大的话,在MATLAB上跑起来比较慢,用Python跑就会快很多,贴此备用吧!

#coding=utf-8
import pandas as pd
import numpy as np
from pandas import DataFrame
from matplotlib import pyplot as plt
from matplotlib import image
import scipy
import cv2
import scipy.io as sio

#原始数据四周补0
def pad_data(data,nei_size):
 m,n = data.shape
 t1 = np.zeros([nei_size//2,n])
 data = np.concatenate((t1,data,t1))
 m,n = data.shape
 t2 = np.zeros([m,nei_size//2])
 data = np.concatenate((t2,data,t2),axis=1)
 return data

#逐像素取大小为nei_size*nei_size的邻域数据
def gen_dataX(data,nei_size):
 x,y = data.shape
 m = x-nei_size//2*2;n = y-nei_size//2*2
 res = np.zeros([m*n,nei_size**2])
 print m,n
 k = 0
 for i in range(nei_size//2,m+nei_size//2):
  for j in range(nei_size//2,n+nei_size//2):
   res[k,:] = np.reshape(data[i-nei_size//2:i+nei_size//2+1,j-nei_size//2:j+nei_size//2+1].T,(1,-1))
   k += 1
 print k
 return res

im = sio.loadmat('data/im1.mat');
im1 = im1['im1']
nei_size=5
#邻域取训练数据
im1= pad_data(im1,nei_size)
data = gen_dataX(im1,nei_size)
sio.savemat("results/"+str(kk)+"/dataX.mat", {'dataX':dataX}) 

补充:像素之间的邻域、连接、连通等问题

1.邻域

邻域分为三类:4邻域、对角邻域和8邻域。

对于以像素P为中心的九宫格而言,一个“加号”所涵盖的四个像素被称为中心像素的4邻域,记作N4(P);角落的四个像素则是对角邻域,记作ND(P);周围全部8个像素称为中心像素的8邻域,记作N8(P)。

从左到右分别为 4邻域 对角邻域 8邻域

2.连接

两个像素为连接关系需满足两个条件:1.两个像素相互接触(邻接);2.两个像素满足某个特定的相似准则,比如像素灰度值相等或者灰度值处于同一个区间V内,这个是人为设置的。

这里容易把邻接和连接搞混,邻接就只是两个像素相邻而已,连接则需要满足灰度值的要求。

连接根据像素所在邻域的不同也分为三类:4连接、8连接和m连接。先给出它们的定义:

4连接:两个像素P和R都在区间V内,且R属于N4(P);

8连接:两个像素P和R都在区间V内,且R属于N8(P);

m连接:两个像素P和R都在区间V内,且R属于N4(P)或者R属于ND(P),且N4(P)与N4(P)交集中的像素不在V中。

我已经被这堆定义搞晕了,用图片要好理解很多:

从左到右分别为 4连接、8连接、m连接。

这里假设集合V=1,可以看出8连接和m连接的区别了吧,N4§和N4®的交集(黄色部分)如果在V中,那就是8连接;不在V中就是m连接。

除此之外,根据定义我们也可以发现4连接也是包含在m连接里面的,因此可以得到这样的包含关系:

4连接 ∈ m连接 ∈ 8连接

既然m连接包含在8连接里面了,还定义这个东西干嘛呢?课本给出的原因是为了消除8连接的“二义性”,在下面像素的连通里会用到。

3.连通

连通的定义很简单,就是由一系列连接像素组成的通路。比如这样:

连通的路线必须是唯一的,但8连接有时候会出现多条路都能走的情况,这时候m连接就派上用场了。

比如这种情况,蓝色和红色路线都能走,此时我们规定必须要走m连接,那就只剩蓝色路线了。因此m连接的实质就是:在像素间同时存在4-连接和8-连接时,优先采用4-连接,并屏蔽两个和同一像素间存在4-连接的像素之间的8-连接。

这样像素之间的这些关系就都搞明白啦~

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • python统计RGB图片某像素的个数案例

    1.对于RGB三通道图片,直接用两层for循环的话,效率比较低 2.可以先将RGB图片转为灰度图片,再利用numpy.where的广播机制统计像素个数.这里有一个前提是提前知道与灰度图片的像素值相对应RGB颜色. 代码如下: from PIL import Image import numpy as np import cv2 img_L = np.array(Image.open('test.png').convert("L")) img_RGB = np.array(Image.o

  • python图像常规操作

    使用python进行基本的图像操作与处理 前言: 与早期计算机视觉领域多数程序都是由 C/C++ 写就的情形不同.随着计算机硬件速度越来越快,研究者在考虑选择实现算法语言的时候会更多地考虑编写代码的效率和易用性,而不是像早年那样把算法的执行效率放在首位.这直接导致近年来越来越多的研究者选择 Python 来实现算法. 今天在计算机视觉领域,越来越多的研究者使用 Python 开展研究,所以有必要去学习一下十分易用的python在图像处理领域的使用,这篇博客将会介绍如何使用Python的几个著名的

  • Python之修改图片像素值的方法

    在做语义分割项目时,标注的图片不合标准,而且类型是RGBA型,且是A的部分表示的类别,因此需要将该图片转化为RGB图片 # -*- coding:utf8 -*- import os from PIL import Image im = Image.open('123.png')#打开图片 pix = im.load()#导入像素 width = im.size[0]#获取宽度 height = im.size[1]#获取长度 for x in range(width): for y in ra

  • Python实现计算图像RGB均值方式

    要求 存在一个文件夹内有若干张图像,需要计算每张图片的RGB均值,并计算全部图像的RGB均值. 代码 # -*- coding: utf-8 -*- """ Created on Thu Nov 1 10:43:29 2018 @author: Administrator """ import os import cv2 import numpy as np path = 'C:/Users/Administrator/Desktop/rgb'

  • Python 实现图像逐像素点取邻域数据

    图像比较大的话,在MATLAB上跑起来比较慢,用Python跑就会快很多,贴此备用吧! #coding=utf-8 import pandas as pd import numpy as np from pandas import DataFrame from matplotlib import pyplot as plt from matplotlib import image import scipy import cv2 import scipy.io as sio #原始数据四周补0 d

  • 一个月入门Python爬虫学习,轻松爬取大规模数据

    Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得简单.容易上手. 利用爬虫我们可以获取大量的价值数据,从而获得感性认识中不能得到的信息,比如: 知乎:爬取优质答案,为你筛选出各话题下最优质的内容. 淘宝.京东:抓取商品.评论及销量数据,对各种商品及用户的消费场景进行分析. 安居客.链家:抓取房产买卖及租售信息,分析房价变化趋势.做不同区域的房价分

  • python数据分析之将爬取的数据保存为csv格式

    目录 csv文件 python的csv模块 从csv文件读取内容 写入csv文件 运用实例 数据准备 将数据存为字典的形式 总结 csv文件 一种用逗号分割来实现存储表格数据的文本文件. python的csv模块 python遍历代码: arr = [12, 5, 33, 4, 1] #遍历输出1 for i in range(0, len(arr)): item = arr[i] print(item) #遍历输出2 for item in arr: print(item) #遍历输出3 st

  • 使用python爬取微博数据打造一颗“心”

    前言 一年一度的虐狗节终于过去了,朋友圈各种晒,晒自拍,晒娃,晒美食,秀恩爱的.程序员在晒什么,程序员在加班.但是礼物还是少不了的,送什么好?作为程序员,我准备了一份特别的礼物,用以往发的微博数据打造一颗"爱心",我想她一定会感动得哭了吧.哈哈 准备工作 有了想法之后就开始行动了,自然最先想到的就是用 Python 了,大体思路就是把微博数据爬下来,数据经过清洗加工后再进行分词处理,处理后的数据交给词云工具,配合科学计算工具和绘图工具制作成图像出来,涉及到的工具包有: requests

  • python如何爬取网站数据并进行数据可视化

    前言 爬取拉勾网关于python职位相关的数据信息,并将爬取的数据已csv各式存入文件,然后对csv文件相关字段的数据进行清洗,并对数据可视化展示,包括柱状图展示.直方图展示.词云展示等并根据可视化的数据做进一步的分析,其余分析和展示读者可自行发挥和扩展包括各种分析和不同的存储方式等..... 一.爬取和分析相关依赖包 Python版本: Python3.6 requests: 下载网页 math: 向上取整 time: 暂停进程 pandas:数据分析并保存为csv文件 matplotlib:

  • python 实现从高分辨图像上抠取图像块

    我就废话不多说了,直接上代码吧! #coding=utf-8 import cv2 import numpy as np import os # 程序实现功能: # 根据patch在高分辨率图像上的索引值,crop出对应区域的图像 # 并验证程序的正确性 ''' 对于当前输入的3328*3328的高分辨率特征图,首先resize到640*640 然后根据当前的patch文件名(包含了patch在高分辨率图像上的行索引和列索引) 这个索引值是将高分辨率图像划分成多个没有overlap的256*25

  • python爬取天气数据的实例详解

    就在前几天还是二十多度的舒适温度,今天一下子就变成了个位数,小编已经感受到冬天寒风的无情了.之前对获取天气都是数据上的搜集,做成了一个数据表后,对温度变化的感知并不直观.那么,我们能不能用python中的方法做一个天气数据分析的图形,帮助我们更直接的看出天气变化呢? 使用pygal绘图,使用该模块前需先安装pip install pygal,然后导入import pygal bar = pygal.Line() # 创建折线图 bar.add('最低气温', lows) #添加两线的数据序列 b

  • Python实战实现爬取天气数据并完成可视化分析详解

    1.实现需求: 从网上(随便一个网址,我爬的网址会在评论区告诉大家,dddd)获取某一年的历史天气信息,包括每天最高气温.最低气温.天气状况.风向等,完成以下功能: (1)将获取的数据信息存储到csv格式的文件中,文件命名为”城市名称.csv”,其中每行数据格式为“日期,最高温,最低温,天气,风向”: (2)在数据中增加“平均温度”一列,其中:平均温度=(最高温+最低温)/2,在同一张图中绘制两个城市一年平均气温走势折线图: (3)统计两个城市各类天气的天数,并绘制条形图进行对比,假设适合旅游的

  • Python基于多线程实现抓取数据存入数据库的方法

    本文实例讲述了Python基于多线程实现抓取数据存入数据库的方法.分享给大家供大家参考,具体如下: 1. 数据库类 """ 使用须知: 代码中数据表名 aces ,需要更改该数据表名称的注意更改 """ import pymysql class Database(): # 设置本地数据库用户名和密码 host = "localhost" user = "root" password = "&quo

  • python读取txt文件并取其某一列数据的示例

    菜鸟笔记 首先读取的txt文件如下: AAAAF110 0003E818 0003E1FC 0003E770 0003FFFC 90 AAAAF110 0003E824 0003E208 0003E76C 0003FFFC A5 AAAAF110 0003E814 0003E204 0003E760 0003FFFC 85 AAAAF110 0003E7F0 0003E208 0003E764 0003FFFC 68 AAAAF110 0003E7CC 0003E1FC 0003E758 000

随机推荐