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各版本的区别(转)
MySQL 的官网下载地址:http://www.mysql.com/downloads/ 在这个下载界面会有几个版本的选择. 1. MySQL Community Server 社区版本,开源免费, ...
- JS 键值对
function Map() { this.keys = new Array(); this.data = new Array(); //添加键值对 this.set = function (key, ...
- [转载]Using ngOptions In AngularJS
http://odetocode.com/blogs/scott/archive/2013/06/19/using-ngoptions-in-angularjs.aspx?utm_source=tui ...
- Marriage Ceremonies(状态压缩dp)
Marriage Ceremonies Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu ...
- Caesar's Legions(三维dp)
Caesar's Legions Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u S ...
- userdate和table类型的效率对比
做cocos2d-x开发的人可能有不少人在实现类时会利用cocos2d-x自己给出的类的实现,也即在luaBinding目录下extern.lua的文件中给出的实现: --Create an clas ...
- CSS 实现垂直居中的几种方案
最近在学关系型数据库相关,MySQL 和 Postgre,捎带着学了 PHP,为了练手这几天就忙着自己搭博客,项目部署在某云上,该云算是良心,给的空间自己搭博客用足够了.本来想着每日一bo的,所以有的 ...
- Stanford机器学习---第九讲. 聚类
原文:http://blog.csdn.net/abcjennifer/article/details/7914952 本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归 ...
- Coursera台大机器学习课程笔记13 -- Regularization
这一节讲的是正则化,在优化中一直会用到正则化项,上课的时候老师一句话代过,没有作过多的解释.听完这节课后, 才明白好大学和野鸡大学的区别有多大.总之,这是很有收获的一节课. 首先介绍了为什么要正则化, ...
- centos rm -rf 恢复删除的文件
Linux有时候执行了 rm -rf 等操作误删了文件绝对是一件可怕的事情,好在有一些解决的办法可以临时救急.这时我们就要用到一款叫做extundelete的工具了. 目录[-] 依赖 安装 查找要恢 ...