图像处理基础

作者简介

本文来自鲍骞月的投稿,主要讲解图像处理基础,欢迎大家积极留言,提出你的疑问或者建议,与投稿小伙伴交流。

GitHub地址:https://github.com/shentibeitaokongle

干货正文

像素读写(RGB色彩空间)

BufferedImage对象像素读写

获取像素二维数组并转换为一维数组(只针对于int类型的像素数据)

我们首先分析一下像素值的一些属性

像素在Java中存储方式

我们这里讨论的是ARGB/RGB通道类型的像素数据,而且是存储在int型数据中的情况。

在Java中int类型是32位,因为是四个通道,所以每个通道占8位。

但是默认情况是10进制的数据。

像素值取值范围

无符号类型(通常情况下):0-255

有符号类型:-128-127

提取各通道的像素值

通过位运算来将各通道的数据提取出来

Alpha通道

Red通道

Green通道

Blue通道

实现原理

首先,我们的位运算都是针对于二进制数进行的,是16进制数,转成2进制就是,下面来一个具体的例子:

现在有一个整体的像素值,而且它的二进制表示为

我们现在要提取Green通道的值,该通道处于整体数据中的第3个通道,也就是倒数第二个通道,所以我们将整体数据右移8位就可以定位到该通道的数据,(右移后前面要补零)

我们来演示一下:

然后使用位与运算分离数据:

&

得到:

这样就把Green通道中的数据分离出来了,然后转成10进制数就是:

其他通道的提取同理,只是右移的位数不同。

将各通道像素值装载整体数值

原理同样通过位运算实现

像素值统计信息(灰度图)

这里我们想要实现一下图像二值化而且减少重复的一些操作,所以这里只对灰度图进行操作。

统计最值

像素最大值

像素最小值

计算像素最值很简单,就是将一张灰度图中的像素都遍历,然后得到最值,代码如下:

输出:

均值和方差

均值

均值很简单而且上面的程序中已经计算,这里略过…

方差

这里我们计算标准差

首先看一下统计学中标准差的公式:

然后我们用代码实现一下:

num =;

for(introw =; row < height; row++) {

for(intcol =; col < width; col++) {

index = row * width + col;

intpixel = pixels[index];

//因为灰度图的各通道的像素值都一样,这里我们只计算出一个通道的像素值即可

intpr = pixel >>16&0xFF;

num = Math.pow((pr - means),2);

}

}

intlen= width * height;

variance = Math.sqrt(num /len);

System.out.println("variance:"+ variance);

输出:

通过均值的图像二值化

原理很简单,同样先遍历各像素,然后对每个像素值与上面计算出来的均值比较,如果大于均值就把该像素设为最大值,否则就设为最小值,然后将二值化后的各个像素值写回到图片中,就得到了结果。

我们具体实现一下:

/**

* 通过均值实现图像的二值化

*/

for(introw =; row < height; row++) {

for(intcol =; col < width; col++) {

index = row * width + col;

intpixel = pixels[index];

intpr = pixel >>16&0xFF;

//进行二值化操作

if(pr > means) {

pr =255;

}else{

pr =;

}

//将各通道像素装载起来,重新写入

//灰度图alpha通道值都为255

pixels[index] = (255

}

}

setRGB(image,,, width, height, pixels);

输出:

效果还是很明显的。

通过方差确定图片信息

方差可以反映一群数据中每个数据与总体均数的差异程度,试想一张空白图片或者一张纯色图片,它的方差肯定为0或者接近于0,所以方差就是图片的一个很重要的信息。

本文来自企鹅号 - 中北Android实验室媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

圆的反演变换

挺神奇的东西,网上没有多少资料,我也不是太懂,代码什么的都没写过,那就抄一下百度百科吧

16220
来自专栏C/C++基础

矩阵转置与矩阵相乘

写这篇博客的原因是为了记录一下矩阵转置与矩阵相乘的实现代码,供日后不时之需。直接原因是今晚(2016.09.13)参加了百度2017校招的笔试(C++岗),里面...

14420
来自专栏marsggbo

【TensorFlow】tf.nn.softmax_cross_entropy_with_logits的用法

在计算loss的时候,最常见的一句话就是 tf.nn.softmax_cross_entropy_with_logits ,那么它到底是怎么做的呢?

8010
来自专栏机器之心

三天速成!香港科技大学TensorFlow课件分享

机器之心整理 参与:蒋思源 这是一套香港科技大学发布的极简 TensorFlow 入门教程,三天全套幻灯片教程已被分享到 Google Drive。机器之心将简...

596120
来自专栏杂七杂八

numpy中random模块使用

在python数据分析的学习和应用过程中,经常需要用到numpy的随机函数,下面我们学习一下具体的使用,本文着重说明各个分布随机数的生成。 numpy.rand...

47050
来自专栏木子昭的博客

万能的0和1 之 字典特征抽取

机器是无法识别自然语言的,机器只能识别0和1,经典的案例就是字典特征抽取 0表示不存在 1表示存在 以国漫人物信息,做示例 原始数据 ? ...

31280
来自专栏量化投资与机器学习

机器学习模型的变量评估和选择基于技术指标『深度解析』

简介 本文重点介绍机器学习模型中输入变量(预测因子)的选择,预处理以及评估的相关细节。所有的计算和实验将用R语言来实现。 输入数据 我们将采用11个指标(振荡器...

39350
来自专栏素质云笔记

keras系列︱Sequential与Model模型、keras基本结构功能(一)

不得不说,这深度学习框架更新太快了尤其到了Keras2.0版本,快到Keras中文版好多都是错的,快到官方文档也有旧的没更新,前路坑太多。 到发文为止...

4.4K80
来自专栏海天一树

机器学习(一):k最近邻(kNN)算法

一、概述 kNN算法,即K最近邻(k-NearestNeighbor)分类算法,是最简单的机器学习算法,没有之一。 该算法的思路是:如果一个样本在特征空间中的k...

32850
来自专栏书山有路勤为径

Batch Normalization怎么加入batch normalization

Batch Normalization 会使你的参数搜索问题变得很容易,使神经网络对超参数的选择更加稳定,超参数的范围会更加庞大,工作效果也很好,也会使你的训练...

9820

扫码关注云+社区

领取腾讯云代金券