matlab imrotated,图像旋转由Matlab无需使用imrotate
你在图像中有洞的原因是因为您正在计算imagepad中每个像素的imagerot的位置。你需要做相反的计算。也就是说,对于imagerot中的每个像素在图像平台中插值。为此,您只需要应用逆变换,在旋转矩阵的情况下只是矩阵的转置(只需更改每个sin上的符号并以另一种方式转换)。
在imagerot中循环像素:
imagerot=zeros(size(imagepad)); % midx and midy same for both
for i=1:size(imagerot,1)
for j=1:size(imagerot,2)
x= (i-midx)*cos(rads)+(j-midy)*sin(rads);
y=-(i-midx)*sin(rads)+(j-midy)*cos(rads);
x=round(x)+midx;
y=round(y)+midy;
if (x>=1 && y>=1 && x<=size(imagepad,2) && y<=size(imagepad,1))
imagerot(i,j)=imagepad(x,y); % k degrees rotated image
end
end
end
还要注意,你的midx和midy需要分别用size(imagepad,2)和size(imagepad,1)来计算,因为第一个维度是指行数(height),第二个是width。
注意:当您决定采用除最近邻居之外的插值方案时,同样的方法也适用,如Rody的线性插值示例。
编辑:我假设你正在使用一个循环来进行示范,但在实践中不需要循环。以下是最近邻插值(您正在使用的内容)的示例,保持相同大小的图像,但您可以修改此图像以生成包含整个源图像的较大图像:
imagepad = imread('peppers.png');
[nrows ncols nslices] = size(imagepad);
midx=ceil((ncols+1)/2);
midy=ceil((nrows+1)/2);
Mr = [cos(pi/4) sin(pi/4); -sin(pi/4) cos(pi/4)]; % e.g. 45 degree rotation
% rotate about center
[X Y] = meshgrid(1:ncols,1:nrows);
XYt = [X(:)-midx Y(:)-midy]*Mr;
XYt = bsxfun(@plus,XYt,[midx midy]);
xout = round(XYt(:,1)); yout = round(XYt(:,2)); % nearest neighbor!
outbound = yout<1 | yout>nrows | xout<1 | xout>ncols;
zout=repmat(cat(3,1,2,3),nrows,ncols,1); zout=zout(:);
xout(xout<1) = 1; xout(xout>ncols) = ncols;
yout(yout<1) = 1; yout(yout>nrows) = nrows;
xout = repmat(xout,[3 1]); yout = repmat(yout,[3 1]);
imagerot = imagepad(sub2ind(size(imagepad),yout,xout,zout(:))); % lookup
imagerot = reshape(imagerot,size(imagepad));
imagerot(repmat(outbound,[1 1 3])) = 0; % set background value to [0 0 0] (black)
为了将上述修改为线性插值,计算XYt中每个坐标的4个相邻像素,并使用分数分量乘积作为权重来执行加权和。我会把它作为一个练习,因为它只会使我的答案进一步超出你的问题的范围。
matlab imrotated,图像旋转由Matlab无需使用imrotate相关推荐
- 图像旋转的MATLAB和OpenCV源码
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 源码中用到的lena.jpg.lena_gray ...
- 【数字图像处理】MATLAB实现图像旋转
前言 上节课学习了实现图像旋转的原理,下课后用matlab实现了一下图像旋转的功能,这里做个记录. 图像旋转原理 图像旋转的本质利用的是向量的旋转. 矩阵乘法的实质是进行线性变换,因此对一个向量进行旋 ...
- matlab 三维图像配准,[转载]Matlab实现多种图像配准(转)
本文讲述如何利用Matlab Image Processing Toolbox中的图像配准工具实现线性正投影.仿射.投影.多项式.分段线性.局部加权平均配准的过程. 实验平台 X86 PC,Windo ...
- matlab中图像轮廓变细,Matlab中,用bwmorph函数提取二进制图像的轮廓
Matlab中bwmorph函数在提取二进制图像的轮廓如下: 语法: BW2 = bwmorph(BW1,operation) : BW2 = bwmorph(BW1,operation,n) : n ...
- matlab dicom图像异常,用Matlab处理Dicom图像
最近在处理CT图像时,CT图像是对人体进行逐层扫描的,在图像有很多不需要的部分,比如肋骨部分就夹杂在里面,导致三维重建出来的图像有很多不需要的部分.很不好处理. 于是,我就想了了简单方法,对一张一张的 ...
- matlab 梯度图像,快速计算matlab中图像的梯度
感谢您的所有答案和有用的建议.我采纳了pseudoDust的建议,Hugues,Dima和高性能标记并写我自己的代码.下面我的代码中给出: clc;clear all;close all; x=32; ...
- 怎样用matlab实现图像的缩放,matlab实现图像缩放
[实例简介]不调用方法,手动实现图像缩放 [实例截图] [核心代码] % MATLAB script for Assessment Item-1 % Task-1 clear; close all; ...
- matlab给图像加云,matlab怎么给图像加雾
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 % -------------------------------------------------------------------- % 雾化处理 ...
- matlab给图像加网格,matlab把图像进行网格化,或者是在图像中画网格
by:黄光耀 % %%%%%%%%%%%画网格%%%%%%%%%% % %%%%%%%%%%把带瓶盖的托盘完全分割开%%%%%%%%% % close all % clc % clear % %% 读 ...
- 使用matlab读取图像并通过matlab自带的fft2,fftshift,ifftshift,ifft2等函数获取该图像的傅里叶频谱图,幅度图,相位谱图,幅度图,相位谱图,幅度谱重建图以及相位谱重建
%% 读取图像.预处理 Picture1 = imread('Cameraman.tif');tryPicture1=rgb2gray(Picture1); % 如果是RGB图像,转成灰度图 catc ...
最新文章
- 无需多个模型也能实现知识整合?港中文MMLab提出「烘焙」算法,全面提升ImageNet性能...
- 《松本行弘的程序世界》中文版原作者序
- Solr实战(二):索引操作
- phpcms_v9推送到其他栏目后再在其他栏目删除导致数据库出错
- Oracle查看表空间和表空间中的对象
- WINCE应用的UI实现方案
- 在EORow或者VORow中对数据进行重复性校验
- (37) BFC IFC GFC FFC概念
- 计算机行业深度分析,广发证券计算机行业深度分析
- 2013浙大878计算机网络大题答案解析
- iOS15.4来袭:新增“男妈妈”表情及口罩面容解锁、AirTags反跟踪等新功能
- Linus Torvalds 命名 [ 冰封荒原 ] 版 Linux 内核的思考
- Ubuntu,QT5连接MySQL
- iOS开发之33 款主宰 2017 iOS 开发的开源库
- JavaScript数据结构-15.二叉树
- APNs Push Notification教程一
- 2022泰迪杯数据挖掘挑战赛C题思路及赛后总结
- IT服务管理(一)服务的演变与整体观
- 计算机设备全年销售表,2021年计算机机房设备行业财务部门表格模板汇总 .pdf
- java 标准偏差函数std_如何使用JAVA计算标准差