首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >即兴文件的写入等效

即兴文件的写入等效
EN

Stack Overflow用户
提问于 2011-02-02 12:09:26
回答 3查看 3.2K关注 0票数 3

在MATLAB的图像处理工具箱中,有一个improfile函数,它从由两点定义的直线下面返回图像的强度轮廓。

是否有类似于此功能的书写功能?也就是说,我想传递两个点(指定一条线)和一个像素值向量来替换线下的一组像素。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-10 15:57:48

我基本上按照格洛的建议做了,但是用手动查找基础像素代替了imline()。优点是没有显示数字,这会带来一些速度上的好处(在我的测试中~0.5s);

代码语言:javascript
运行
复制
dist_euc = norm(p1 - p2);
n_pix = round(dist_euc*2);
step = (p1 - p2)/n_pix;
pix_coords = zeros(n_pix, 2);
for cp = 0:n_pix
    pix_coords(cp+1, :) = round(p2 + cp*step);
end
pix_inds = sub2ind(size(im), pix_coords(:,2), pix_coords(:,1));
pix_inds = unique(pix_inds);
im(pix_inds) = interpft(prof, length(pix_inds));
票数 0
EN

Stack Overflow用户

发布于 2011-02-02 14:47:16

我知道一种丑陋的方法。如下所示:

使用内联创建由您的行组成的ROI。(先使用imshow。)

代码语言:javascript
运行
复制
imshow(I,[])
H = imline(gca,[x1 y1; x2 y2]);

从内联创建二进制ROI

代码语言:javascript
运行
复制
BW = createMask(H);

找到ROI的坐标

代码语言:javascript
运行
复制
p = find(BW==1);

沿ROI指定的线将向量插入图像i中。

代码语言:javascript
运行
复制
I(p) = v;

为了工作,向量v的长度和ROI的长度必须是相同的。这并不总是容易的。要修复它,将v向量内插以得到正确的大小,即用下面的代码替换最后一行

代码语言:javascript
运行
复制
I(p) = interpft(v,length(p));
票数 2
EN

Stack Overflow用户

发布于 2011-02-02 15:53:59

你查过improfile的源代码了吗?它使用interp1round来获得轮廓点的索引。

另一种更简单(也可能不是很好)的方法是,对这条线使用一个简单的参数方程,并获得线段上的各个点:

代码语言:javascript
运行
复制
imageData =zeros(50,50);
endPoints =[ 2 3; 40 27];

numberOfInterpolationPoints = 50;
t=linspace(0,1,numberOfInterpolationPoints);

% x and y of the points along this line
x = 2 + t*( 40-2);
y = 3 + t*(27-3);

% Round them to obtain valid indices
profPoints = [x;y]';
profPoints = round(profPoints);

% Keep only unique numbers
profPoints = unique(profPoints,'rows');

% Convert to liner indices
profPointsInd = sub2ind(size(imageData),profPoints(:,1), profPoints(:,2));

imageData(profPointsInd) = 1;

imagesc(imageData);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4874298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档