我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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-连接。

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

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Visual C++中如何实现对图像数据的读取显示

本篇文章为大家展示了Visual C++中如何实现对图像数据的读取显示,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在利用VC进行数据库编程时,经常需要处理数据库中的图像数据,将该图像从数据库中读取
2023-06-17

Android编程实现基于BitMap获得图片像素数据的方法

本文实例讲述了Android编程实现基于BitMap获得图片像素数据的方法。分享给大家供大家参考,具体如下: 网上看到的参考是:int[] pixels = new int[bit.getWidth()*bit.getHeight()];/
2022-06-06

Python实现批量绘制遥感影像数据的直方图

这篇文章主要为大家详细介绍了如何基于Python中gdal模块,实现对大量栅格图像批量绘制直方图,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
2023-02-27

Python实现批量读取HDF多波段栅格数据并绘制像元直方图

这篇文章主要为大家详细介绍了如何基于Python语言gdal模块,实现多波段HDF栅格图像文件的读取、处理与像元值可视化(直方图绘制)等操作,需要的可以参考一下
2023-03-01

Python如何实现批量绘制遥感影像数据的直方图

这篇文章主要介绍“Python如何实现批量绘制遥感影像数据的直方图”,在日常操作中,相信很多人在Python如何实现批量绘制遥感影像数据的直方图问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python如何实
2023-07-05

Python如何实现批量读取HDF多波段栅格数据并绘制像元直方图

本篇内容介绍了“Python如何实现批量读取HDF多波段栅格数据并绘制像元直方图”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先将本文所需
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录