04 数字图像技术——图像特征提取之实验结果与分析——python

04 数字图像技术——图像特征提取之实验结果与分析
03 数字图像技术——频域滤波实验结果与分析
02 数字图像技术——颜色空间转换与颜色空间分割实验结果与分析
01 数字图像基本操作——图像采样、量化、算术运算、点运算实验结果及分析

一、实验目的

1.理解颜色直方图、颜色矩的基本原理;
2.理解统计纹理分析算法的基本原理;
3.理解局部二值模式的基本原理。

二、实验内容

1.颜色直方图、颜色矩。
2.基于灰度变换的伪彩色算法。
3.局部二值模式。

三、实验设备/仪器

1.计算机;
2.python语言开发环境;
3.移动式存储器(软盘、U盘等)。
4.记录用的笔、纸。

四、实验原理

1.灰度共生矩阵
  灰度共生矩阵是以条件概率提取纹理的特征,它反映的是灰度图像中关于方向、间隔和变化幅度等方面的灰度信息,因此可以用于分析图像的局部特征以及纹理的分布规律。
  灰度共生矩阵有两种定义形式,第一种定义为:
设灰度图像矩阵为G,位置相距为 、灰度值为i和j的两个像素点对同时出现的联合概率分布称为灰度共生矩阵。若将灰度等级分为n档,那么联合概率分布可以用n×n阶的灰度共生矩阵表示。
在这里插入图片描述

为3×3的灰度矩阵,将原有的灰度级分为2档,1和2为第1档,3和4为第2档; 当(△x, △y)=(1,0)时,灰度组合数位:(1,2), (2,1), (3,4), (4,4), (2,3), (3,1)。其属于的灰度档为:(1,1), (1,1), (2,2), (2,2), (1,2), (2,1)。
  因此(1,1)出现了2次,(2,2)出现了2次,(1,2)和(2,1)各出现了1次,此时构成的共生矩阵为:
在这里插入图片描述

第二种定义:
  设某个点对的间隔为d,两点之间连线与轴的方向角为θ,两点灰度级分别为i和j,则其共生矩阵可以表示为[P(i,j,d,θ)],点(i,j)处的值代表的是满足对应条件的数目值。其中,d不宜取得过大,一般来说取窗口大小为22×22~ 25×25,以Ox轴为起始,通常θ=0°、45°、90°、135°,逆时钟方向计算。
在这里插入图片描述

共生矩阵反映的是整幅图像灰度分布的综合信息,由此出发,设给定值d和θ值,将共生矩阵内各个元素进行归一化处理并记为p(i,j),可以进一步提取出描述纹理特征的一系列特征值如下:
(1)角二阶矩或能量
在这里插入图片描述

(2)惯性矩
在这里插入图片描述

(3)熵
在这里插入图片描述

(4)相关
在这里插入图片描述

(5)逆差矩

在这里插入图片描述

2. 颜色空间的基本概念
  图像的颜色空间包括某个颜色域的所有颜色。常用的颜色模型有NTSC、HSV、YCbCr等模型。各种颜色空间在图像处理中各有优势,且可以互相转换。
  在NTSC格式中,图像由三个分量表示。第一个分量亮度Y表示灰度信息,后两个分量(I,Q)表示色度信息。RGB空间向YIQ空间转换方法:
在这里插入图片描述

  HSV模型常用于选择颜色,它是面向用户的一种复合主观感觉的色彩模型,比RGB模型更接近人们对颜色的感知。具体转换公式参见理论教材。
  在YCbCr模型中,Y为亮度,Cb和Cr共同描述图像的色调,其中Cb、Cr分别为蓝色分量和红色分量相对于参考值的坐标。RGB空间向YCbCr空间转换方法:
在这里插入图片描述

3.伪彩色处理
(1)空域伪彩色处理
  伪彩色处理是把灰度图像的各个不同灰度按照线性或非线性的映射函数变换成不同的彩色,也可以将原来不是图像的数据表示成灰度图像,再转换成彩色图像达到增强的目的。
  最简单的实现从灰度到彩色的变换方法可以把灰度图像的灰度级从0(黑)到Mi(白)分成N 个区间,i=1,2,L, N 。给每个区间Ii指定一种色彩Ci。该方法直观简单,缺点是变换出的彩色有限。
  从灰度到彩色的一种更具代表性的变换方式是根据色度学的原理,将原图像 f(x,y)的灰度分段经过红、绿、蓝三种不同的变换,变成三基色分量R(x,y) 、G(x,y)、B(x,y),然后用它们去控制彩色显示器的红、绿、蓝电子枪,以产生相应的彩色信号,彩色的含量由变换函数的形状决定。
(2)频域伪彩色处理
  这种方法是先把灰度图像经过傅立叶变换到频域,在频域内用三个不同传递特性的滤波器分离成三个独立分量,再对它们进行傅立叶的反变换,得到三副代表不同频率成分的单色图像,对这三副图像再做进一步的处理,然后将三基色的分量分别加到彩色显示器的红、绿、蓝显示通道,从而实现频域分段的伪彩色增强。

五、实验步骤与要求

1. 彩色图像的分析
(1)调入并显示彩色图像flower1.tif ;
(2)拆分这幅图像,并分别显示其R,G,B分量;
(3)根据各个分量图像的情况讨论该彩色图像的亮度、色调等性质。
2 彩色图像的直方图均衡
(1)接内容1;
(2)显示这幅图像的R,G,B分量的直方图,分别进行直方图均衡处理,并显示均衡后的直方图和直方图均衡处理后的各分量;
(3)将处理完毕的各个分量合成彩色图像并显示其结果;
(4)观察处理前后图像的彩色、亮度、色调等性质的变化。
3 伪彩色处理
(1)意义:将亮度低的映射为蓝色(冷色),亮度高的映射为红色(暖色)。
(2)方法:分别用三个矩阵保存,三个通道的灰度值。每个通道的灰度值,有不同的映射函数。
(3)输入灰度级 对应的输出彩色
% 0~63 1/4 蓝色
% 64~127 2/4 紫色
% 128~191 3/4 黄色
% 192~255 4/4 红色

六、实验结果及分析

1.颜色直方图、颜色矩。
在这里插入图片描述              在这里插入图片描述

  图 1 颜色直方图流程图                    图 2 实现颜色矩流程图

一般颜色直方图代码如下:

import cv2
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文
def imageHist(img, type):
    # color = (255, 255, 255)
    if type == 31:
        color = (255, 0, 0)
        windowName = 'B Hist'
    elif type == 32:
        color = (0, 255, 0)
        windowName = 'G Hist'
    elif type == 33:
        color = (0, 0, 255)
        windowName = 'R Hist'
    Hist = cv2.calcHist([img], [0], None, [256], [0.0, 255.0])  # 计算直方图
    minV, maxV, minL, MaxL = cv2.minMaxLoc(Hist)  # 获取最大值和最小值,并获取其对应的下标
    HistImage = np.zeros([256, 256, 3], np.uint8)  # 新建图像模板,用于直方图的绘制
    for h in range(256):
        intenormal = int(Hist[h] * 256 / maxV)  # 避免超出范围
        cv2.line(HistImage, (h, 256), (h, 256 - intenormal), color)  # 绘制直方图
    cv2.imshow(windowName, HistImage)
    return HistImage
img = cv2.imread('D:\shuzi_image\cat.jpg')
channels = cv2.split(img)
for i in range(0, 3):
    imageHist(channels[i], i + 31)
cv2.waitKey(0)
plt.figure()
plt.imshow(img)
plt.title('原始图像')
plt.show()

在这里插入图片描述

在这里插入图片描述

图 3 彩色图像的一般颜色直方图

颜色直方图是基本的颜色特征,它反映的是图像中像素颜色值的组成分布,即出现了哪些颜色,以及各种颜色出现的概率。
实现颜色矩的代码如下:
from matplotlib import pyplot as plt
from skimage import data, exposure,io
import numpy as np
from scipy import stats
# 中文显示工具函数
def set_ch():
    from pylab import mpl
    mpl.rcParams['font.sans-serif'] = ['FangSong']
    mpl.rcParams['axes.unicode_minus'] = False
set_ch()
image = io.imread('D:\shuzi_image\kk.jpg')
#image = data.coffee()
# 求RGB图像的颜色矩特征,共9维特征
# 定义3*3数组,分别对RGB图像的三个通道求均值、方差、偏移量
features = np.zeros(shape=(3, 3))
for k in range(image.shape[2]):
    mu = np.mean(image[:, :, k])  # 求均值
    delta = np.std(image[:, :, k])  # 求方差
    skew = np.mean(stats.skew(image[:, :, k]))  # 求偏移量
    features[0, k] = mu
    features[1, k] = delta
    features[2, k] = skew
print(features)

在这里插入图片描述
在这里插入图片描述

图 4 图像的颜色矩

一阶矩可以表征该颜色通道的平均响应强度,二阶矩可以表示该颜色通道的响应方差,三阶矩可以表征该颜色通道数据分布的偏移度。从实验结果可以看出此图像的R通道数据的均值最高,其次是B通道的。

2. 基于灰度变换的伪彩色方法(matlab实现)
在这里插入图片描述

图 5 实现伪彩色图像流程图

实现灰度图像变换的伪彩色方法代码如下:
%题目:基于灰度变换的伪彩色方法
%意义:将亮度低的映射为蓝色(冷色),亮度高的映射为红色(暖色)。
%方法:分别用三个矩阵保存,三个通道的灰度值。每个通道的灰度值,有不同的映射函数。
% 输入灰度级        输出彩色
% 063  1/4         蓝色
% 64127 2/4        紫色
% 128191 3/4       黄色
% 192255  4/4      红色
clc;
clear;
grayImage=rgb2gray(imread('kkk.jpg'));
figure,imshow(grayImage);
[row,col]=size(grayImage);
range=255;%每个通道的最大灰度值
R = zeros(row,col);
G = zeros(row,col);
B = zeros(row,col);
for i=1:row
     for j=1:col
        if grayImage(i,j)<=range/4% [0,64]偏蓝
            R(i,j)=0;
            G(i,j)=4*grayImage(i,j);
            B(i,j)=range;
            else if grayImage(i,j)<=range/2% (64,128] 偏紫
                 R(i,j)=0;
                 G(i,j)=range;
                 B(i,j)=-4*grayImage(i,j)+2*range;
                else if grayImage(i,j)<=3*range/4% (128, 192]
                        R(i,j)=4*grayImage(i,j)-2*range;
                        G(i,j)=range;
                        B(i,j)=0;
                     else
                        R(i,j)=range;
                        G(i,j)=4*(range-grayImage(i,j));
                        B(i,j)=0;
                    end
                end
        end
    end
end
out = zeros(row,col);
for i=1:row
    for j=1:col
              out(i,j,1)=R(i,j);
              out(i,j,2)=G(i,j);
              out(i,j,3)=B(i,j);
    end
end
out=out/256;
figure,imshow(out);

实验结果如下:
在这里插入图片描述

图 6 灰度图像的伪彩色变换

由此实验可以看出,此伪彩色变换将亮度低的映射为蓝色(冷色),将亮度高的映射为红色(暖色)。比如背景是白色的因此变换成了红色。

3. 局部二值模式
在这里插入图片描述

图 7 实现LBP流程图

使用LBP方法提取小猫图像的纹理特征的代码如下:
import skimage.feature
import skimage.segmentation
import matplotlib.pyplot as plt
from skimage import data,io
from skimage.data import coffee
#img = coffee()
img = io.imread("D:\shuzi_image\cat.jpg")
for colour_channel in (0, 1, 2):
    img[:, :, colour_channel] = skimage.feature.local_binary_pattern(
        img[:, :, colour_channel], 8,1.0,method='var')
plt.imshow(img)
plt.show()

在这里插入图片描述在这里插入图片描述

图 8 基于LBP计算图像的纹理特征

LBP方法是用来刻画邻域内,像素点的灰度相对中心点的变化。因为人类视觉系统对纹理的感知与平均灰度(亮度无关),而局部二值模式方法注重像素灰度的变化,符合人类视觉对纹理感知的特点。
## 七、实验总结
  • (1)一般颜色直方图对图像的旋转、小幅平移、小幅缩放等变换不敏感,对图像质量的变化(如增加噪声也不敏感),所以一般颜色直方图法适用于对难以进行语义分割的图像和无需考虑空间位置的图像进行描述。
  • (2)图像的颜色矩中,一阶矩可以表征该颜色通道的平均响应强度,二阶矩可以表示该颜色通道的响应方差,三阶矩可以表征该颜色通道数据分布的偏移度。相对于颜色直方图特征提取,颜色矩特征提取的优点是无须对颜色特征进提前量化。
  • (3)基于灰度变换的伪彩色方法是将亮度低的映射为蓝色(冷色),亮度高的映射为红色(暖色)。分别用三个矩阵保存,三个通道的灰度值。每个通道的灰度值,有不同的映射函数。将原来不是图像的数据表示成灰度图像,再转换成彩色图像达到增强的目的。
  • (4)局部二值模式的基本思想是将中心像素点的灰度值作为阈值,将其邻域内的像素点灰度值与阈值进行比较,从而得到二进制编码用以表述局部纹理特征。它不易受图像整体灰度线性变化的影响,当图像的灰度值发生线性均匀变化时,其LBP特征编码是不变的。经阈值化后的二值矩阵,可以看出一个二值纹理模式,用来刻画邻域内,像素点的灰度相对中心点的变化。因为人类视觉系统对纹理的感知与平均灰度(亮度无关),而局部二值模式方法注重像素灰度的变化,符合人类视觉对纹理感知的特点。
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小_喻

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值