Brenham算法——matlab实现

更新时间:2023-06-23 07:26:21 阅读: 评论:0

Brenham算法——matlab实现
功能
根据两点进⾏直线插补
⽀持不在图像中的点的插补,即对输⼊的两个点进⾏拟合,拟合直线上的点如果在图像范围内,则修改图像对应的像素值实现代码
Brenham 算法可以保证图像的连通度,其实现⽅法如下:
function [ img , runTime ] = MyBrenhamDrawLine( img , x1 , y1 , x2 , y2 , lColor )
% Brenham直线画线算法,img的图像背景为⿊⾊,img为输⼊的图像,
% (x1,y1)为第⼀个点的坐标,x1是矩阵的⾏的位置,⽽⾮屏幕坐标系的定义
% (x2,y2)为第⼆个点的坐标
% lColor : 插补的直线的颜⾊的灰度值,默认是1,即⽩⾊
% 如果没有指定具体的颜⾊,则直线在图中默认是⽩⾊
if nargin < 6
lColor = 1;
end
if ~ismatrix(img)
error('------------can not deal with 3-dims data--------');
end
tic
广西会计从业资格考试
[height, width] = size( img );
if x1>0 && x1<=height && y1>0 && y1<=width
committeeimg(x1,y1) = lColor;
end
if x2>0 && x2<=height && y2>0 && y2<=width
img(x2,y2) = lColor;
aiting
end
k = (y1-y2)/(x1-x2);
flag = 1;
if abs(k) > 1
[x1, y1] = SwapXY( y1, x1 );
标点符号[x2, y2] = SwapXY( y2, x2 );
k = 1/k;
flag = 0;
end
if x1 > x2
[x1, x2] = SwapXY(x2, x1);
[y1, y2] = SwapXY(y2, y1);
end
deltaX = x2 - x1;
deltaY = abs(y2 - y1);
p = 2*deltaY - deltaX;
inner world
用醋洗脸的方法minX = min(x1, x2);
bahrain
maxX = max(x1, x2);
yk = y1;
for ii = minX : maxX-1
if p < 0
p = p + 2 * deltaY;
el
if k > 0
yk = yk + 1;
el
yk = yk - 1;
end
p = p + 2 * deltaY - 2 * deltaX;
end
if flag
if ii+1>0 && ii+1<=height && yk>0 && yk<=width                img(ii+1,yk) = lColor;
end
el
if ii+1>0 && ii+1<width && yk>0 && yk<height                img(yk,ii+1) = lColor;
超好听的韩国歌曲end
end
end
runTime = toc;
end
function [y, x]=SwapXY(x1,y1)德语好学吗
x=y1;
y=x1;
endjust fat
结果图
img = zeros(500);
img=MyBrenhamDrawLine(img,200, 500,600,400); imtool(img)

本文发布于:2023-06-23 07:26:21,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/154601.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:图像   直线   算法   屏幕   像素   坐标
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图