shape context matlab,使用PhotoShop与Matlab结合测试Shape Context Matching

Abstract

Matlab做IP是很强,对图像在算法层面有绝对给力的功能,但是对于图像的交互操作不够好。

最好是能够在PhotoShop里面画测试图像,然后在Matlab里设计算法来测试。

本文就是简单介绍一下这两个东西结合起来怎么个用。

这 次 测试的目的是想实现:在ps中画两幅图像,用shape context来对这两幅图像做匹配。

PhotoShop其实也就是提供一个GUI的作用。当然了,PS功能很强大,结合PS的脚本也可以实现很强大的处理功能。

Shape Context代码见[1] 。

1/配置

我的测试环境是:PhotoShop CS3 Extended + MATLAB R2009a。

安装完PS CS3后,安装目录下有一个Matlab目录:

0818b9ca8b590ca3270a3433284dd417.png

这就是Photoshop Toolbox for MATLAB的目录。

配置方法:在Matlab里把这个目录添加到Path序列中,然后刷新工具箱即可。

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

配置完成之后,就可以在Matlab的帮助里看到PhotoShop toolbox的帮助项。

0818b9ca8b590ca3270a3433284dd417.png

Matlab目录里面有一些基本的跟ps交互的函数。这些函数本质上是对PS的脚本做了一个封装。

举个例子psblur.m:

function [] = psblur()

%PSBLUR Run the Blur filter.

%

% Example:

% psblur()

% Build up the JavaScript

pstext = ['var b = "";' ...

'try { ' ...

' app.activeDocument.activeLayer.applyBlur();' ...

' b = "OK";' ...

'}' ...

'catch(e) { ' ...

' b = e.toString();' ...

'}' ...

'b;'];

psresult = psjavascriptu(pstext);

if ~strcmp(psresult, 'OK')

error(psresult);

end

先用pstext构建脚本调用命令,再用psjavascriptu将此命令作为参数调用javascript脚本。所以,鉴于PS脚本的强大,等于是可以实现matlab中对ps的完全操控。

2/用到的几个命令

pslaunch - 打开ps(也可以鼠标打开)

psconfig -  配置图像操作属性

psnewdoc - 在ps中新建图像

psdocnames - 获得ps中所有打开的文件名

pssetactivedoc - 设置活动文件

psgetpixels - 从ps中获取图像的像素

基本就用到了这些命令,很简单,这里,只是把ps作为一个输入的GUI而已。

3/测试流程

这次测试的目的是想实现:在ps中画两幅图像,用shape context来对这两幅图像做匹配。

先把处理的基本单元设置为像素。然后,在Matlab中打开ps,并且新建两幅64x64的图像。

pslaunch;

psconfig('pixels', 'pixels');

psnewdoc(64,64);

psnewdoc(64,64);

在ps里画图,这里我画了两个简单的轮廓:

0818b9ca8b590ca3270a3433284dd417.png

然后,在matlab中获取这两幅图像的数据:

docs = psdocnames();

pssetactivedoc(docs{1});

im1 = psgetpixels();

pssetactivedoc(docs{2});

im2 = psgetpixels();

我写了一个m文件来对图像进行轮廓检测,并且在轮廓上进行采样。

function samp = select_sample_points(image,N)

%select N sample points from a contour and draw these points on the contour

% Input:

% filename - image file

% N - number of sample points

% Output:

% samp - Nx2 matrix

%

% by visionfans, 26/3/2011

if ischar(image)

BW = imread(filename);

else

BW = image;

end

if ~islogical(BW)

BW = im2bw(BW);

end

[rows,cols] = size(BW);

% select sample points from contour

boundaries = bwboundaries(BW,'noholes');

bd = boundaries{1};

sel = floor(linspace(1,size(bd,1)-size(bd,1)/N,N));

samp = bd(sel,:);

% view sample points

% figure;imshow(BW);

% hold on;

% plot(samp(:,2),samp(:,1),'ro');

% hold off;

% normalize sample points

samp = samp ./ max(rows,cols);

之后,就可以直接用Shape Context[1] 进行匹配了。

4/结果

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

PS:

更多相关信息请参考:[1 ,2 ,3 ,4 ,5 ,6 ]。

Referrences

[5] MATLAB Photoshop 自述文件.pdf(PS安装目录/Matlab/中)

[6]Adobe Photoshop CS3 Extended + MATLAB 7.0+,http://www.inthemod.com/bps/?p=136

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值