您的位置:首页 > 编程语言 > MATLAB

matlab练习程序(随机直线采样)

2014-09-06 17:47 465 查看
我只是感觉好玩,写了这样一段程序。

原理就是先随机生成两个点,然后根据这两个点画直线,最后在直线上的像素保留,没在直线上的像素丢弃就行了。

最后生成了一幅含有很多空洞的图像。

当然,对含有空洞的图像是可以用修复算法修复的。

我也尝试修复了一下,用的算法我过去也写过,可以看这里

这一次就不贴修复代码了,那段程序中的输入图像img、mask和这里的输出图像img、mask是一模一样的。

原图:



采样后:



修复后:



matlab代码如下:

main.m:

clear all; close all;clc;

img=double(imread('lena.jpg'));
imshow(img,[]);

[h,w]=size(img);

n=200;
pix=rand(n,4);
pix(:,1:2)=round(pix(:,1:2)*(w-1))+1;
pix(:,3:4)=round(pix(:,3:4)*(h-1))+1;
mask=zeros(h,w);

for i=1:n
x1=pix(i,1);x2=pix(i,2);
y1=pix(i,3);y2=pix(i,4);
mask=drawline(mask,x1,y1,x2,y2);
end

ind=find(mask~=1);
img(ind)=0;
figure;imshow(img,[])


drawline.m:

function img=drawline(img,x1,y1,x2,y2)   %因为图像坐标和数学函数坐标y轴朝向相反,所以这里所有y变量取相反数
[h w]=size(img);
y1=-y1;
y2=-y2;

if x1~=x2
k=(y2-y1)/(x2-x1);
b=y1-k*x1;
for i=1:w
yy=-round(i*k+b);
xx=i;
if yy>=1 && yy<=h && xx>=1 && xx<=w
img(yy,xx)=1;
end
end
end

if y1~=y2
k=(x2-x1)/(y2-y1);
b=x1-k*y1;
for i=-h:1
yy=-i;
xx=round(i*k+b);
if yy>=1 && yy<=h && xx>=1 && xx<=w
img(yy,xx)=1;
end
end
end

end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: