PCA 在图像分析上的应用

2024-06-18 00:04
文章标签 分析 应用 图像 pca

本文主要是介绍PCA 在图像分析上的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

同一物体旋转角度求取

直接上代码:

import cv2, os
import numpy as np
import timedef perform_pca(image, num_components):# 将图像转换为浮点型img_float = np.float32(image)img_flatten = img_float.reshape(-1, 2)# 计算均值和协方差矩阵mean, eigenvectors = cv2.PCACompute(img_flatten, mean=None, maxComponents=num_components)return mean, eigenvectorsdef rotate_coords(coords, theta):"""绕原点旋转坐标点集。参数:coords: 坐标点集,每个元素是一个(x, y)的元组。theta: 旋转角度,以弧度为单位。返回:旋转后的坐标点集。"""# 定义旋转矩阵rotation_matrix = np.array([[np.cos(theta), -np.sin(theta)],[np.sin(theta), np.cos(theta)]])# 将坐标点集转换为NumPy数组以便进行矩阵运算coords_array = np.array(coords)# 应用旋转矩阵rotated_coords = np.dot(coords_array, rotation_matrix)return rotated_coordsdef judge_direction1(mean, vector, center_x, center_y):v = np.array([center_x - mean[0][0], center_y - mean[0][1]])if np.dot(v, vector) < 0:vector = -vectorreturn vectordef judge_direction2(mean, vector, image, img_path):edge_image = cv2.Canny(image, 50, 200)file_name = img_path.split("/")[-1]save_path = "/home/xxx/下载/mask/result/"x_angle = vector_angle(vector,np.array([1, 0]))edge_non_zero_coords = cv2.findNonZero(edge_image)edge_non_zero_coords = edge_non_zero_coords - mean[0]edge_non_zero_coords = rotate_coords(edge_non_zero_coords, np.radians(x_angle))min_x, min_y = np.min(edge_non_zero_coords, axis=0)[0]max_x, max_y = np.max(edge_non_zero_coords, axis=0)[0]new_image = np.zeros((int(max_y-min_y)+1, int(max_x - min_x)+1), np.uint8)for coord in edge_non_zero_coords:x, y = coord[0]new_image[int(y - min_y), int(x - min_x)] = 255# cv2.imwrite(save_path + file_name, new_image)if max_x - min_x > max_y - min_y:if abs(max_x) > abs(min_x):vector = -vectorelse:if abs(max_y) > abs(min_y):vector = -vectorreturn vectordef get_vector(img_path):image = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)h, w = image.shapecenter_x = int(w / 2)center_y = int(h / 2)non_zero_coords = cv2.findNonZero(image)# 执行PCAnum_components = 2mean, eigenvectors = perform_pca(non_zero_coords, num_components)vector = eigenvectors[0]vector = judge_direction2(mean, vector, image, img_path)return vectordef vector_angle(v1, v2):# 计算点积dot_product = np.dot(v1, v2)# 计算向量的模norm_v1 = np.linalg.norm(v1)norm_v2 = np.linalg.norm(v2)# 计算余弦值cos_theta = dot_product / (norm_v1 * norm_v2)# 计算弧度制的夹角theta_rad = np.arccos(np.clip(cos_theta, -1.0, 1.0))# 将弧度制转换为角度制theta_deg = np.degrees(theta_rad)# 确定角度的方向性cross_product = np.cross(v1, v2)if cross_product < 0:theta_deg = 360 - theta_degreturn 360 - theta_degdef get_angle(img_path1, img_path2):vector1 = get_vector(img_path1)vector2 = get_vector(img_path2)angle = vector_angle(vector1, vector2)print(vector1, vector2, angle)return angleif __name__ == "__main__":img_path1 = "/home/xxx/下载/mask/mask3/0.jpg"img_path2 = "/home/xxx/下载/mask/mask3/32.jpg"get_angle(img_path1, img_path2)

这篇关于PCA 在图像分析上的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1070756

相关文章

[职场] 公务员的利弊分析 #知识分享#经验分享#其他

公务员的利弊分析     公务员作为一种稳定的职业选择,一直备受人们的关注。然而,就像任何其他职业一样,公务员职位也有其利与弊。本文将对公务员的利弊进行分析,帮助读者更好地了解这一职业的特点。 利: 1. 稳定的职业:公务员职位通常具有较高的稳定性,一旦进入公务员队伍,往往可以享受到稳定的工作环境和薪资待遇。这对于那些追求稳定的人来说,是一个很大的优势。 2. 薪资福利优厚:公务员的薪资和

亮相WOT全球技术创新大会,揭秘火山引擎边缘容器技术在泛CDN场景的应用与实践

2024年6月21日-22日,51CTO“WOT全球技术创新大会2024”在北京举办。火山引擎边缘计算架构师李志明受邀参与,以“边缘容器技术在泛CDN场景的应用和实践”为主题,与多位行业资深专家,共同探讨泛CDN行业技术架构以及云原生与边缘计算的发展和展望。 火山引擎边缘计算架构师李志明表示:为更好地解决传统泛CDN类业务运行中的问题,火山引擎边缘容器团队参考行业做法,结合实践经验,打造火山

自制的浏览器主页,可以是最简单的桌面应用,可以把它当成备忘录桌面应用

自制的浏览器主页,可以是最简单的桌面应用,可以把它当成备忘录桌面应用。如果你看不懂,请留言。 完整代码: <!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><ti

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

高度内卷下,企业如何通过VOC(客户之声)做好竞争分析?

VOC,即客户之声,是一种通过收集和分析客户反馈、需求和期望,来洞察市场趋势和竞争对手动态的方法。在高度内卷的市场环境下,VOC不仅能够帮助企业了解客户的真实需求,还能为企业提供宝贵的竞争情报,助力企业在竞争中占据有利地位。 那么,企业该如何通过VOC(客户之声)做好竞争分析呢?深圳天行健企业管理咨询公司解析如下: 首先,要建立完善的VOC收集机制。这包括通过线上渠道(如社交媒体、官网留言

气象站的种类和应用范围可以根据不同的分类标准进行详细的划分和描述

气象站的种类和应用范围可以根据不同的分类标准进行详细的划分和描述。以下是从不同角度对气象站的种类和应用范围的介绍: 一、气象站的种类 根据用途和安装环境分类: 农业气象站:专为农业生产服务,监测土壤温度、湿度等参数,为农业生产提供科学依据。交通气象站:用于公路、铁路、机场等交通场所的气象监测,提供实时气象数据以支持交通运营和调度。林业气象站:监测林区风速、湿度、温度等气象要素,为林区保护和

PyTorch模型_trace实战:深入理解与应用

pytorch使用trace模型 1、使用trace生成torchscript模型2、使用trace的模型预测 1、使用trace生成torchscript模型 def save_trace(model, input, save_path):traced_script_model = torch.jit.trace(model, input)<

哺乳细胞重组表达人鼠嵌合抗体:制备与应用

重组抗体是一类具有广泛应用价值的蛋白质,在药物研发和生物医学研究中发挥着重要作用。本文将介绍重组抗体的表达方式,重点关注嵌合抗体制备和哺乳细胞重组表达人鼠嵌合抗体的技术原理和应用。 重组抗体表达的原理和方法 重组抗体表达是通过将人或动物源的免疫球蛋白基因导入表达宿主细胞,并使其表达出特异性抗体蛋白质。常用的表达系统包括细菌、哺乳细胞和真核微生物等。 嵌合抗体制备的步骤和优势 选择适当的抗原

打包体积分析和优化

webpack分析工具:webpack-bundle-analyzer 1. 通过<script src="./vue.js"></script>方式引入vue、vuex、vue-router等包(CDN) // webpack.config.jsif(process.env.NODE_ENV==='production') {module.exports = {devtool: 'none

【Qt6.3 基础教程 16】 掌握Qt中的时间和日期:QTimer和QDateTime的高效应用

文章目录 前言QTimer:定时任务的强大工具QTimer的基本用法高级特性:单次定时器 QDateTime:处理日期和时间获取当前日期和时间日期和时间的格式化输出日期和时间计算 用例:创建一个倒计时应用结论 前言 在开发桌面应用程序时,处理时间和日期是一个常见且重要的任务。Qt框架提供了强大的工具来处理与时间相关的功能,其中QTimer和QDateTime是最核心的类。本