IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 实验二 —— 图像局部特征描述子 -> 正文阅读

[人工智能]实验二 —— 图像局部特征描述子

Harris角点检测

Harris角点检测算法(也称Harris检测器),主要思想:若该像素周围存在多个方向的边,则该像素点即为角点

1. 原理分析

什么是角点

  • 局部窗口沿各方向移动,均产生明显变化的点
  • 图像局部曲率突变的点
    在这里插入图片描述

Harris角点检测基本思想

  • 平坦区域
    任意方向移动均无灰度变化
  • 边缘
    沿着边缘方向移动无灰度变化
  • 角点
    沿着任意方向均有明显灰度变化
    在这里插入图片描述

数学表达

数学定义

  • 将图像窗口平移[u,v]产生灰度变化E(u,v)
    在这里插入图片描述
    对公式进行展开化简:
    在这里插入图片描述

  • 延伸知识点:一元函数泰勒展开
    在这里插入图片描述

  • 延伸知识点:二元函数泰勒展开
    在这里插入图片描述

2. 示例

Harris 角点检测步骤

  • 读入图像转灰度图
# 读入图像ort compute_harris_response
im = array(Image.open('Image/revolve-1.jpg').convert('L'))
  • 计算响应函数
harrisim = compute_harris_response(im, 3)


# 在灰度图像中,对每个像素计算Harris角点响应函数
def compute_harris_response(im, sigma=3):
    # 计算导数
    imx = zeros(im.shape)
    # 高斯导数
    filters.gaussian_filter(im, (sigma, sigma), (0, 1), imx)
    imy = zeros(im.shape)
    filters.gaussian_filter(im, (sigma, sigma), (1, 0), imy)

    # 矩阵分量
    Wxx = filters.gaussian_filter(imx*imx, sigma)
    Wxy = filters.gaussian_filter(imx*imy, sigma)
    Wyy = filters.gaussian_filter(imy*imy, sigma)

    # 特征值
    Wdet = Wxx*Wyy - Wxy**2
    Wtr = Wxx + Wyy
    return Wdet / Wtr
# Harris响应函数
harrisim1 = 255 - harrisim

  • 基于响应值选择角点

# 从响应图中返回角点
def get_harris_points(harrisim, min_dist=10, threshold=0.5):
    # 挑选高于阈值
    corner_threshold = threshold
    # coner_threshold = harrisim.max() * threshold
    harrisim_t = (harrisim > corner_threshold) * 1

    # 得到坐标
    coords = array(harrisim_t.nonzero()).T
    # 响应值
    candidate_values = [harrisim[c[0], c[1]]for c in coords]

    # 按响应值排序
    index = argsort(candidate_values)[::-1]

    # 将可行点的位置存放到数组
    allowed_locations = zeros(harrisim.shape)
    allowed_locations[min_dist:-min_dist, min_dist:-min_dist] = 1

    # 选择最佳角点
    filtered_coords = []
    for i in index:
        if allowed_locations[coords[i, 0], coords[i, 1]] == 1:
            filtered_coords.append(coords[i])
            allowed_locations[(coords[i, 0]-min_dist):(coords[i, 0] + min_dist), (coords[i, 1]-min_dist):(coords[i, 1]+min_dist)] = 0
    return filtered_coords
  • 在原图中画出检测的角点
# 画出Harris响应图
subplot(221)
imshow(im)
axis('off')
axis('equal')

threshold = [0.1, 0.2, 0.3]
for i, thres in enumerate(threshold):
    filtered_coords = get_harris_points(harrisim, 50, thres)
    subplot(2, 2, i+2)
    title(str(threshold[i]))
    imshow(im)
    plot([p[1] for p in filtered_coords], [p[0] for p in filtered_coords], '*')
    axis('off')

show()
def plot_harris_points(image, filtered_coords):
    figure(dpi=120)
    gray()
    imshow(image)
    plot([p[1] for p in filtered_coords],
         [p[0] for p in filtered_coords], '*')
    axis('off')
    show()

结果显示
在这里插入图片描述

SIFT特征

1.SIFT算法实现特征匹配主要有三个流程

  1. 提取关键点;
  2. 对关键点附加详细的信息(局部特征),即描述符
  3. 通过特征点(附带上特征向量的关键点)的两两比较找出相互匹配的若干对特征点,建立景物间的对应关系

2. 哪些点是SIFT中要查找的关键点(特征点)?

  • 十分突出的点,不会因光照、尺度、旋转等因素的改变而消失,比如角点、边缘点、暗区域的亮点以及亮区域的暗点。

3. 尺度空间

什么是尺度空间

主要思想是通过对原始图像进行尺度变换,获得图像多尺度下的空间如下表示。从而实
现边缘、角点检测和不同分辨率上的特征提取,以满足特征点的尺度不变性。
在这里插入图片描述

4. 特征匹配算法

  • 提取图像特征点

  • 提取特征点周围图像块,构造特征描述符

  • 通过特征描述符对比,实现特征匹配


imname = 'Image/revolve-1.jpg'
im = array(Image.open(imname).convert('L'))
# 得到SIFT特征
process_image(imname, 'revolve.sift')
# 取出坐标及特征描述
l1, d1 = read_features_from_file('revolve.sift')
figure(dpi=180)
gray()
subplot(221)
plt.axis('off')
imshow(Image.open(imname))
title('src')
subplot(222)
# 可视化特征点
plot_features(im, l1, circle=False)
title('SIFT')
subplot(223)
plot_features(im, l1, circle=True)
title('scale')
# 检测harris角点,对比
harrisim = compute_harris_response(im)
subplot(224)
filtered_coords = get_harris_points(harrisim, 60, 0.1)
imshow(im)
plot([p[1] for p in filtered_coords], [p[0] for p in filtered_coords], '*')
axis('off')
title('Harris')
show()



# 检测兴趣点
def process_image(imagename, resultname, params = "--edge-thresh 10 --peak-thresh 5"):

    if imagename[-3:] != 'pgm':
        im = Image.open(imagename).convert('L')
        im.save('tmp.pgm')
        imagename = 'tmp.pgm'
    cmmd = str(r'E:\computerstudy\python\SIFT\ch02\sift.exe '+imagename+" --output="+resultname +
               " "+params)
    os.system(cmmd)
    print('processed', imagename, 'to', resultname)


def read_features_from_file(filename):
    f = loadtxt(filename)
    return f[:, :4], f[:, 4:]


def plot_features(im, locs, circle=False):
    def draw_circle(c, r):
        t = arange(0, 1.01, .01)*2*pi
        x = r*cos(t) + c[0]
        y = r*sin(t) + c[1]
        plot(x, y, 'b', linewidth=2)
    imshow(im)
    if circle:
        for p in locs:
            draw_circle(p[:2], p[2])
    else:
        plot(locs[:, 0], locs[:, 1], 'ob')
    axis('off')
    return

结果显示
在这里插入图片描述

匹配地理标记图像

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 11:50:53  更:2022-04-28 11:52:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:51:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码