matlab - 如何使用 Matlab 通过最近邻插值法旋转图像

标签 matlab image-processing nearest-neighbor image-rotation

我没有插值的纯代码:

im1 = imread('lena.jpg');imshow(im1);    
[m,n,p]=size(im1);
thet = rand(1);
m1=m*cos(thet)+n*sin(thet);
n1=m*sin(thet)+n*cos(thet);    

for i=1:m
    for j=1:n
       t = uint16((i-m/2)*cos(thet)-(j-n/2)*sin(thet)+m1/2);
       s = uint16((i-m/2)*sin(thet)+(j-n/2)*cos(thet)+n1/2);
       if t~=0 && s~=0           
        im2(t,s,:)=im1(i,j,:);
       end
    end
end
figure;
imshow(im2);

这段代码产生了黑点,问题是如何做插值?谢谢大家的启发。 附言不要求内置函数:imrotate(im1,1/thet,'nearest');

最佳答案

要旋转没有黑点的图像,您需要朝相反的方向旋转。

旋转矩阵的逆是它的转置。此外,旋转图像总是更大,最大旋转 45 度。因此,sqrt(2) 因子

im1 = imread('lena.jpg');imshow(im1);  
[m,n,p]=size(im1);
thet = rand(1);
mm = m*sqrt(2);
nn = n*sqrt(2);
for t=1:mm
   for s=1:nn
      i = uint16((t-mm/2)*cos(thet)+(s-nn/2)*sin(thet)+m/2);
      j = uint16(-(t-mm/2)*sin(thet)+(s-nn/2)*cos(thet)+n/2);
      if i>0 && j>0 && i<=m && j<=n           
         im2(t,s,:)=im1(i,j,:);
      end
   end
end
figure;
imshow(im2);

关于matlab - 如何使用 Matlab 通过最近邻插值法旋转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1811372/

相关文章:

opencv - 图像处理中的线性插值

python - 使用 K 最近邻创建特征

python - python中由一维矩阵组成的二维矩阵

matlab - 将矩阵转换为元胞数组的元胞数组

image-processing - Tensorflow:我的损失函数产生巨大的数字

arrays - 在Rust中将图像转换为Rulinalg矩阵

algorithm - 给定二维平面中的 n 个点,我们必须找到每个点之间的 k 个最近邻居

python - 在字典中查找整数最近邻

matlab - 如何在Matlab中对多维矩阵的行进行排序而不改变第一列中元素的顺序?

matlab - 如何在MATLAB中阅读MP3