不使用内置函数进行图像裁剪的matlab代码

Posted

技术标签:

【中文标题】不使用内置函数进行图像裁剪的matlab代码【英文标题】:matlab code for image cropping without using inbuilt function 【发布时间】:2017-09-11 16:22:56 【问题描述】:

以下代码用于裁剪图像的多余白色部分。(用于减小图像大小)。即如果图像中存在 "A",则顶部、底部、左侧和右侧的所有多余白色部分都将被删除。

在这段代码中,我无法理解 "sum" 函数的用法,请帮忙..

 %  Find the boundary of the image
  [y2temp x2temp] = size(bw);
 x1=1;
 y1=1; 
  x2=x2temp; 
  y2=y2temp;


 % Finding left side blank spac es
 cntB=1;
 while (sum(bw(:,cntB))==y2temp)
  x1=x1+1;
 cntB=cntB+1;
    end


  % Finding right side blank spaces
 cntB=1;
  while (sum(bw(cntB,:))==x2temp)
 y1=y1+1;
 cntB=cntB+1;
end


 % Finding upper side blank spaces
cntB=x2temp;
 while (sum(bw(:,cntB))==y2temp)
x2=x2-1;
cntB=cntB-1;
end


 %  Finding lower side blank spaces
 cntB=y2temp;
 while (sum(bw(cntB,:))==x2temp)  
 y2=y2-1;
 cntB=cntB-1;  
 end


 % Crop the image to the edge
  bw2=imcrop(bw,[x1,y1,(x2-x1),(y2-y1)]);

【问题讨论】:

阅读???????????????????????????????????????????????????? 另外。在这里,它对图像bw 的一行或一列求和。该索引称为cntB。如果它们都是 1,则总和等于总长度。所以它继续while循环。 谢谢,我理解了代码。 【参考方案1】:

这段代码可能做同样的事情,但行数更少。

bw_bin=bw==1; %make it binary
row = all(bw_bin); %checks if they are all one
column = all(bw_bin');
bw=bw(find(column==0,1,'first'):find(column==0,1,'last'),find(row==0,1,'first'):find(row==0,1,'last')); %ake only the rows and columns where this is not the case

【讨论】:

以上是关于不使用内置函数进行图像裁剪的matlab代码的主要内容,如果未能解决你的问题,请参考以下文章

怎么用matlab对图像进行裁剪

如何在不使用任何内置高斯函数的情况下对图像进行高斯模糊?

matlab中图像旋转

内置函数用于在 python 中编码的视觉词包

如何使用 Imcrop 和 Matlab 保存空间参考

使用 PHP 图像调整大小/裁剪内置方法的高内存使用率