zoukankan      html  css  js  c++  java
  • matlab练习程序(矩形变换为圆)

    最近对图像坐标的变换很感兴趣啊,这次是将一张图像变换为圆形。

    变换原理就是按变换前后像素到圆心的距离按比例缩减就行了。

    改变x,y方向上的系数,应该还可以变换为椭圆,不过我还没有尝试。

    注意我这里相当于缩小图像了,所以用的是正向插值,如果想生成一个大圆,还是需要逆向插值的。

    原图如下:

    处理后效果:

    matlab代码如下:

    clear all;close all;clc;
    
    img=imread('lena.jpg');
    [h w]=size(img);
    imshow(img);
    
    imgn=zeros(h,w);
    cenX=w/2;
    cenY=h/2;
    
    newR=w/2;           %圆的半径
    for y=1:h
        for x=1:w
       
            r=sqrt((x-cenX)^2+(y-cenY)^2);  %当前像素到图像中心的距离
            ang=atan2(y-cenY,x-cenX);
         
            if ang>=pi/4 && ang<=3*pi/4 || ang<=-pi/4 && ang>=-3*pi/4
                R=sqrt(cenY^2+(x-cenX)^2);  %当前像素和图像中心连线上,图像边缘像素和图像中心的距离
            else
                R=sqrt(cenX^2+(y-cenY)^2);
            end
           
            ss=r/R;         %比例系数
            xx=round((newR*ss*cos(ang)+cenX));
            yy=round((newR*ss*sin(ang)+cenY));
           
            if xx>=1 && xx<=w && yy>=1 && yy<=h
                imgn(yy,xx)=img(y,x);
            end
           
        end
    end
    
    figure;
    imshow(imgn,[])
  • 相关阅读:
    UI和3D物体的堆叠响应
    UI中的事件系统EventSystem
    UI的管理
    学习笔记--2020年12月30日
    Java集合框架
    Java基本数据类型
    数据存储
    intent和手势探测
    即时消息Toast和对话框
    Android事件处理的三种方法
  • 原文地址:https://www.cnblogs.com/tiandsp/p/3870290.html
Copyright © 2011-2022 走看看