关于图像分割和hough变换(16)
关于图像分割和hough变换(19_02_16学习进度)
关于一张图像Hough变换完成后的部分(1)
之前的进度已经完成了一张图片的Hough变换处理部分,可以从其中得到较为明显部分的直线,并在上面添加了黑线,之后需要完成的是通过得到的处理完成的图片识别出其中的倾斜角并旋转
首先需要做的是去出图片中的多于信息只留下啊方便检测倾斜角度的Hough变换直线,可以使用过程中Houghline函数得到的图片,如果是彩色图片也可以使用使用matlab中提供的imabsdiff函数
imabsdiff函数:可以在用于相近的图像中找到不同点
之前在日志3中已经使用过就不再赘述
效果如下:
图像的几何变换(imrotate函数)
图像的旋转是图像几何变换的一种…看到上面预览的图就能知道…旋转前后的图像的像素的RGB都是没有改变的,改变的只是每一个像素的所在位置…这个就是旋转的本质:
把原图像像素从原点(x,y)放到目标位置点上(x’,y’)…这个(x,y)到(x’,y’)的转换是经过旋转计算而来的…那么这个图像处理就是旋转处理(几何变换).
只是图像的像素点的位置改变了,图像本身的彩色信息并没有改动什么.
图像的显示都是基于矩阵像素来显示的…上面每一张图像的图像信息其实是一个RGB矩阵来的.所以必须把旋转后的图像放到一个像素矩阵中才能显示这个旋转后的图像.
设一张图像的大小是col*row的.那么以这个图像对角线为直径的圆就能够包含这个图像经旋转后的图像…在这里因为图像的显示是矩阵式的,所以这里以图像对角线为边长构造一个正方形来保存旋转后的图像.从上面旋转后的图像可以看出效果啦,旋转后的图像就包含在这个正方形的矩阵中.
计算旋转图像所需要的正方形
因为图像是col*row的,所以这个正方形的边长 new_img_size = (col2+row2)^0.5;
这样使用matlab就可以生成一个存储最终图像的rgb矩阵了:
img_rotated = uint8(zeros(new_img_size , new_img_size , 3);
本质就是找到原点(x,y)的新位置(x’,y’),然后把原点的像素复制到目标点上,旧坐标到新坐的变的是"旋转"而来的。
旋转的原因:
设一个原点P,P的坐标是:(x,y),这里的x是列分量,y是行分量.
那么P点离图像左上角的距离是:r=(x2+y2)^0.5; 同时p到(1,1)点的连线与列方向有一个夹角:a
此时r,x,y的关系可以进一步表示成:
x = rcos(a);
y = rsin(a);
到了这里可以知道(x,y)本身与"旋转"角度有一定的关系,之后就将p点绕(1,1)这点顺时针旋转b角度,得到p的新位置(x’,y’)…由r,x,y的关系可以得到r,x’,y’的关系如下:
x’ = rcos(a+b);
y’ = rsin(a+b);
进一步化简:
x’ = rcos(a)cos(b) - rsin(a)sin(b);
y’ = rsin(a)cos(b) + rcos(a)sin(b);
然后再结合r,x,y的关系得到x,y,x’,y’的关系如下:
x’ = xcos(b) - ysin(b);
y’ = ycos(b) + xsin(b);
点旋转位置关系就出来了:即(x,y)经过顺时针旋转b角度后可以得到(x’,y’),
写成matlab的方式:
[x’,y’] = [cos(b) -sin(b);sin(b) cos(b)]*[x,y];
下面就可以利用这个公式对原图的每一个像素点(x,y)计算其旋转后的位置(x’,y’)了,然后就是复制图像的像素点。
下一次将学习【如何复制和删除像素点】
- 神经网络权重初始化问题
- Andrew Ng机器学习课程笔记--week11(图像识别&总结划重点)
- 市民近期到南沙有望体验到无人驾驶技术
- Andrew Ng机器学习课程笔记--week10(优化梯度下降)
- Andrew Ng机器学习课程笔记--week9(下)(推荐系统&协同过滤)
- Andrew Ng机器学习课程笔记--week9(上)(异常检测&推荐系统)
- python程序员开发必备的5大工具,你用过几个?
- Andrew Ng机器学习课程笔记--week8(K-means&PCA)
- Andrew Ng机器学习课程笔记--week7(SVM)
- Pytorch windows10安装教程
- Udacity并行计算课程笔记-The GPU Programming Model
- DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week2优化算法
- DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week1深度学习的实用层面
- 通俗理解决策树中的熵&条件熵&信息增益
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Django上线部署之Apache的方法
- centos7系统下python2与python3共存
- linux把一个文件的内容复制到另一个文件的末尾
- 详解linux下nohup日志输出过大问题解决方案
- K8S dashboard 2.0 安装配置并使用 ingress-nginx 访问
- linux模糊查找文件用什么命令比较好
- Ubuntu14.04服务器环境下配置PHP7.0+Apache2+Mysql5.7的方法
- Linux C 后台服务程序单进程控制的实现
- Linux下SSH免密码登录配置详解
- SSH端口转发实现内网穿透的实现
- 在linux中用同一个版本的R 同时安装 Seurat2 和 Seurat3的教程
- AUCell:在单细胞转录组中识别细胞对“基因集”的响应
- linux查看硬件配置命令的方法示例
- Ubuntu环境编译安装PHP和Nginx的方法
- Ubuntu环境源码编译安装xdebug的方法