matlab练习程序(矩形变换为单连通形状)
变换使用的模板必须是单连通的,而且模板中心必须在模板内,如果在模板中打个结或是月牙形,这里的程序就处理不了了。
虽然非单连通模板也有办法处理,不过不是这里要讨论的。
这里用到的方法和矩形变换为圆那片文章中用的方法几乎一样,变换前后像素按比例缩减,不过在判断弧度和图像边界到模板中心距离时略有不同。
变换为圆时弧度可以直接计算出来,而变换为任意形状只能算出一个最小相似值。
至于图像边界到模板中心距离只能分八种情况判断了,处理圆时可以根据对称性简化程序,这里似乎没有什么好办法简化。
变换细节上,那篇文章中使用的是正向插值,这里使用正向插值则会产生很多空洞,因此选择了更常见的逆向插值。
处理结果如下:
原图:

模板:

结果:

matlab代码如下:
clear all;close all;clc;
img=imread('lena.jpg');
mask_line=imread('mask.bmp')>;
[h w]=size(img);
imgn=zeros(h,w);
ind=find(mask_line==);
[lineY lineX]=ind2sub([h w],ind); %模板形状像素的位置
cenY=round(mean(lineY)); %模板形状中心
cenX=round(mean(lineX));
lineAng=atan2(lineY-cenY,lineX-cenX); %模板线上每个点到形状中心弧度
lineR=sqrt((lineY-cenY).^+(lineX-cenX).^); %模板线上每个点到形状中心距离
ang_ul=atan2(-cenY,-cenX); %图像四个点与模板形状中心弧度
ang_ur=atan2(-cenY,w-cenX);
ang_dl=atan2(h-cenY,-cenX);
ang_dr=atan2(h-cenY,w-cenX);
for y=:h
for x=:w
r=sqrt((x-cenX)^+(y-cenY)^);
ang=atan2(y-cenY,x-cenX);
if ang>=-pi && ang<ang_ul %分别求八个象限图像边界到模板中心距离
R=abs(cenX/cos(ang)); %应该可以简化,这样判断似乎繁琐了
elseif ang>=ang_ul && ang<-pi/
R=abs(cenY/cos(pi/-ang));
elseif ang>=-pi/ && ang<ang_ur
R=abs(cenY/cos(pi/+ang));
elseif ang>=ang_ur && ang<
R=abs((w-cenX)/cos(pi-ang));
elseif ang>= && ang<ang_dr
R=abs((w-cenX)/cos(ang));
elseif ang>=ang_dr && ang< pi/
R=abs((h-cenY)/cos(pi/-ang));
elseif ang>=pi/ && ang<ang_dl
R=abs((h-cenY)/cos(pi/+ang));
elseif ang>=ang_dl && ang<=pi
R=abs(cenX/cos(pi-ang));
end
[junk index]=min(abs(ang-lineAng)); %距离最近的弧度
newR=lineR(index);
ss=R*r/newR; %缩减扩展比例系数
xx=round((ss*cos(ang)+cenX));
yy=round((ss*sin(ang)+cenY));
if xx>= && xx<=w && yy>= && yy<=h
imgn(y,x)=img(yy,xx);
end
end
end
imshow(img);
figure;imshow(mask_line);
figure;imshow(imgn,[])
题外话:
今天等了一天在京东订的kindle,到下午5点都还没送来,最后发现竟然是手机没信号,没有收到送货通知。
中国移动一定是看我用的2G卡,又没开上网功能,欺负人,不给优先级。
如果收到货,也许现在正在玩kindle,就不会有这篇文章了。
matlab练习程序(矩形变换为单连通形状)的更多相关文章
- 为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换
写在最前面:本文是我阅读了多篇相关文章后对它们进行分析重组整合而得,绝大部分内容非我所原创.在此向多位原创作者致敬!!!一.傅立叶变换的由来关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶 ...
- Halcon算子之shape_trans,用于变换区域的形状
函数原型:shape_trans(Region : RegionTrans : Type : ) *shape_trans*仍然是区域,smallest_rectangle1可以获得四个角的坐标 函数 ...
- matlab练习程序(SUSAN检测)
matlab练习程序(SUSAN检测) SUSAN算子既可以检测角点也可以检测边缘,不过角点似乎比不过harris,边缘似乎比不过Canny.不过思想还是有点意思的. 主要思想就是:首先做一个和原图像 ...
- (转)matlab练习程序(HOG方向梯度直方图)
matlab练习程序(HOG方向梯度直方图)http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html HOG(Histogram o ...
- UGUI RectTransform 矩形变换
UGUI游戏对象基本都有这个组件. float radius; radius = GetComponent<RectTransform>().sizeDelta.x; radius = ( ...
- matlab练习程序(矩形变换为圆)
最近对图像坐标的变换很感兴趣啊,这次是将一张图像变换为圆形. 变换原理就是按变换前后像素到圆心的距离按比例缩减就行了. 改变x,y方向上的系数,应该还可以变换为椭圆,不过我还没有尝试. 注意我这里相当 ...
- matlab练习程序(最小包围矩形)
又是计算几何,我感觉最近对计算几何上瘾了. 当然,工作上也会用一些,不过工作上一般直接调用boost的geometry库. 上次写过最小包围圆,这次是最小包围矩形,要比最小包围圆复杂些. 最小包围矩形 ...
- matlab练习程序(全景图到穹顶图)
这个程序我最初是用FreeImage写的,这两天改成了matlab,再不贴上来,我就要忘了. 看到一篇文章有这样的变换,挺有意思的,就拿来试了一下,文章点此. 全景图到穹顶图变换,通俗的说就是将全景图 ...
- matlab示例程序--Motion-Based Multiple Object Tracking--卡尔曼多目标跟踪程序--解读
静止背景下的卡尔曼多目标跟踪 最近学习了一下多目标跟踪,看了看MathWorks的关于Motion-Based Multiple Object Tracking的Documention. 官网链接:h ...
随机推荐
- MySQL的left join中on与where的区别
关于 “A LEFT JOIN B ON 条件表达式” 的一点提醒 ON 条件(“A LEFT JOIN B ON 条件表达式”中的ON)用来决定如何从 B 表中检索数据行,即使on中包含有A表中的列 ...
- jquery源码分析-工具函数
jQuery的版本一路狂飙啊,现在都到了2.0.X版本了.有空的时候,看看jquery的源码,学习一下别人的编程思路还是不错的. 下面这里是一些jquery的工具函数代码,大家可以看看,实现思路还是很 ...
- windows下使用批处理文件调用python程序
这个随笔涉及到几个批处理脚本得知识点. windows的start命令, 启动另一个窗口运行指定的程序或命令. windows的call命令, 从批处理程序调用另一个程序, 直到被调用程序退出, 再继 ...
- 怎么让dedecms生成html页面更快些
如何让织梦生成html页面更快些呢? 1.把文章模板里的“相关文章”.“热点文章”.“推荐文章”这类的标记删除了,用其它方式,如:shtml.js 引入 2.把织梦模板里用标记表示的模板路径.php附 ...
- Linux 中的 wheel 组和 staff 组
wheel 组的概念 wheel 组的概念继承自 UNIX.当服务器需要进行一些日常系统管理员无法执行的高级维护时,往往就要用到 root 权限:而“wheel” 组就是一个包含这些特殊权限的用户池: ...
- HTML前端——CSS样式
使用CSS样式的方式: HTML<!DOCTYPE> 声明标签 内链样式表<body style="background: green; margin: 0; paddin ...
- MySQL Profiling 的使用
MySQL Profiling 的使用 在本章第一节中我们还提到过通过 Query Profiler 来定位一条 Query 的性能瓶颈,这里我们再详细介绍一下 Profiling 的用途及使用方法. ...
- PHP很有用的一个函数ignore_user_abort ()
PHP很有用的一个函数ignore_user_abort () 2013-01-16 14:21:31| 分类: PHP | 标签:php 函数 |举报|字号 订阅 ignore_us ...
- chrome打开本地文件目录
chrome地址栏输入: file:///
- swiper组件实现向上翻页时缩小
var mySwiper = new Swiper ('.swiper-container', { direction: 'vertical', loop: true, // 如果需要前进后退按钮 n ...