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 ...
随机推荐
- iOS-UIView category
UIView+Extension.h #import <UIKit/UIKit.h> @interface UIView (Extension) @property (nonatomic, ...
- iOS-使用Xcode拉伸图片
如果要制作一个类似于QQ消息气泡的图片,该如何制作呢?android中可以使用.9图片指定图片中的某一部分拉伸,那iOS中类似的功能要如何实现呢,Xcode提供了类似的功能.具体步骤如下: 1.选择需 ...
- 一个C++类的注释:
#ifndef __RUNTIMEPARA__HPP#define __RUNTIMEPARA__HPP #include <string> //后面会有介绍 #include <m ...
- jQuery.snowflake雪花飘落插件
一.前言 前言:最近圣诞节来临,需要在页面上应用一个雪花飘落的效果,做之前产品经理给了我网络上的一个demo,地址是http://demo.lanrenzhijia.com/demo/1225/sd/ ...
- Gulp, 比Grunt更好用的前端构建工具
Gulp, 比Grunt更好用的前端构建工具 本文主要从两个方面介绍Gulp:一,Gulp相对于Grunt的优势: 二,Gulp的安装和使用流程 Gulp相对于Grunt的优势 gulp.js 的作者 ...
- cocos基础教程(11)事件分发机制
cocos3.0的事件分发机制: 创建一个事件监听器-用来实现各种触发后的逻辑. 事件监听器添加到事件分发器_eventDispatcher,所有事件监听器有这个分发器统一管理. 事件监听器有以下几种 ...
- reverse array java
/* package whatever; // don't place package name! */ import java.util.*; import java.lang.*; import ...
- 对于(function(){}())和function(){}实例的作用域分析(里面有很多问题……)
今天在群里看到一个问题,让我纠结了好一会.下面是我的分析,感觉里面还有很多问题,关于作用域还是不太理解,希望大家看到问题第一时间反馈给我,看到实在受不了的地方说几句都没关系,谢谢. 请看题: 1.对象 ...
- DICOM医学图形处理:storescp.exe与storescu.exe源码剖析,学习C-STORE请求(续)
转载:http://blog.csdn.net/zssureqh/article/details/39237649 背景: 上一篇博文中,在对storescp工具源文件storescp.cc和DcmS ...
- js 实现图片预加载 (js操作 Image对象属性complete ,事件onload 异步加载图片)
通过js操纵DOM很多情况下都是为了实现和当前页html元素的异步载入,我谈谈对Image对象的一些认识.看个例子:<input type="button" name=&qu ...