MatLab对图像处理计算机视觉有用的小函数

博客上有不少人造轮子,明明一句话就能解决的事,非得花一上午的时间去for循环??这是初学数据结构的萌新的做法,如果你已经编写了足够代码,还是特别喜欢for循环去,那你用什么时间看论文,做研究呢?所以我想收集一些有用的函数。

 

 

  • 看你的标签中是否包含某一类:
A = ismember(Label, 12);

label是否包含第12类。

会返回一个矩阵

 

 

  • 看你的标签怎么分割你的图片的。
BW = boundarymask(Label);
imshow(imoverlay(RGB,BW,'cyan'),'InitialMagnification',67);

上图:

后一句的效果是可视化:

为什么会这样,因为这就是我要的效果。嗯具体的在我结课后会跟着代码一块放出来。

 

 

  • 下采样可以用
B=A(1:2:100,1:2:100)

对A下采样,间隔2采样。最后赋值给B

 

  • 然后上采样居然都是补零的所以我自己写了一个
for i = 1:1:150
    for j = 1:1:240
        B((i-1)*8+1:(i-1)*8+9,(j-1)*8+1:(j-1)*8+9)=Visit1(i,j);
    end
end

辣鸡作者,居然使用for循环。

对不起我无能为力了各位,我是真找不着函数,有知道的可以告诉我,提高下我对matlab的理解

连接两个字符串 : 

str = ['a','b'];

数字转换成string

num2str(23,'%4d');

数值数组转换成string,不能用上面函数,即使用for依旧会造成混乱,我不知道为什么。明明调试moment,num2str(Label)输出单个元素,比如3,但是如果有个东西在左边等着赋值,并且有个for循环,就会变成整个字符串比如1111222333444赋值给a

A = sprintfc('%g',Label);

根据样本的标签,画彩色散点图

numlabel存储的是标签

scatter(Y(:,1),Y(:,2),'filled','cdata',numlabel);

trLabel存储的是标签,是double

for i =1 : length(trLabel)
 c = trLabel(i)/15;
scatter(Y(i,1),Y(i,2),'filled','cdata',[min(c+1/16,1) min(c-1/16,1) min(1-c,1)]);
hold on;
end

 

Y第一列存储横坐标,第二列存储纵坐标。

 

如果想要自己配色,可以这样:

% for i = 1:length(Y(:,1))
%     scatter(Y(:,1),Y(:,2),4,'MakerFaceColor',[trLabel(:)/20,0.5,0.5]);
%     %plot(Y(i,1),Y(i,2),'--rs','MarkerFaceColor','1','Color',[.trLabel(i)*20 25 25]);
% end
c = ['y' 'r' 'c' 'w' 'k' 'b' 'g' 'm'];
for i =1 : length(trLabel)
    if numlabel(i)<=8
        scatter(Y(i,1),Y(i,2),c(numlabel(i)))
        hold on;
    elseif numlabel(i) == 9
        scatter(Y(i,1),Y(i,2),'filled','cdata',[0.5 0.5 0.5]);
        hold on;
    elseif numlabel(i) == 10
        scatter(Y(i,1),Y(i,2),'filled','cdata',[0.1 0.9 0.5]);
        hold on;
    elseif(numlabel(i) == 11)
                scatter(Y(i,1),Y(i,2),'filled','cdata',[0.3 0,0.7]);
                hold on;
    elseif(numlabel == 12)
                    scatter(Y(i,1),Y(i,2),'filled','cdata',[0.9 0 0.5]);
                    hold on;
    else 
         scatter(Y(i,1),Y(i,2),'filled','cdata',[0.9 0.9 0.5]);              
         hold on;
                
    end
    
end

样本点只有边缘上色,空心圆,nz是空心圆大小。后面的三个[x y z]是颜色,取值范围[0,1].如果在最后面加了'd'那就是菱形了。

scatter(Y(i,1),Y(i,2),nz,'MarkerEdgeColor',[0.5 0.5 0.5],'d');

事实上除了功能性函数,还有计算型函数更加的重要,要完成一个计算公式,不同的函数会使用不同的内存,不同的方式,也有不同的完成时间,不同的表达形式。

举个例子:如果用for循环完成bsxfun的功能就会花更多的时间。

而2016版之后直接抛弃的bsxfun函数,两个不同维度的矩阵,张量,是直接可以相加相乘,各种操作的。

所以,找到最简便的方法就很重要。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值