matlab练习程序(随机直线采样)
2014-09-06 17:47
465 查看
我只是感觉好玩,写了这样一段程序。
原理就是先随机生成两个点,然后根据这两个点画直线,最后在直线上的像素保留,没在直线上的像素丢弃就行了。
最后生成了一幅含有很多空洞的图像。
当然,对含有空洞的图像是可以用修复算法修复的。
我也尝试修复了一下,用的算法我过去也写过,可以看这里。
这一次就不贴修复代码了,那段程序中的输入图像img、mask和这里的输出图像img、mask是一模一样的。
原图:
![](http://images.cnitblog.com/blog/340413/201409/061732268751615.jpg)
采样后:
![](http://images.cnitblog.com/blog/340413/201409/061732388608319.jpg)
修复后:
![](http://images.cnitblog.com/blog/340413/201409/061733234692859.jpg)
matlab代码如下:
main.m:
drawline.m:
原理就是先随机生成两个点,然后根据这两个点画直线,最后在直线上的像素保留,没在直线上的像素丢弃就行了。
最后生成了一幅含有很多空洞的图像。
当然,对含有空洞的图像是可以用修复算法修复的。
我也尝试修复了一下,用的算法我过去也写过,可以看这里。
这一次就不贴修复代码了,那段程序中的输入图像img、mask和这里的输出图像img、mask是一模一样的。
原图:
![](http://images.cnitblog.com/blog/340413/201409/061732268751615.jpg)
采样后:
![](http://images.cnitblog.com/blog/340413/201409/061732388608319.jpg)
修复后:
![](http://images.cnitblog.com/blog/340413/201409/061733234692859.jpg)
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
相关文章推荐
- matlab练习程序(随机游走图像)
- matlab练习程序(霍夫变换检测直线斜率)
- matlab练习程序(随机粒子切换特效)
- matlab练习程序(白平衡<动态阈值>)
- matlab练习程序(图像水平/竖直移动)
- matlab练习程序(开操作)
- matlab练习程序(读入灰度图像序列)
- matlab练习程序(最大均值滤波)
- matlab练习程序(Gabor Filter)
- matlab练习程序(图像放大/缩小,放大没有进行插值操作)
- matlab练习程序(图像放大/缩小,最邻近插值)
- matlab练习程序(Harris角点检测)
- permutation 随机置换检验的Matlab程序
- matlab练习程序(透视变换)
- matlab练习程序(PCA)
- matlab练习程序(图像旋转,最邻近插值)
- matlab练习程序(图像加噪,各种滤波)
- matlab练习程序(图像傅里叶变换,幅度谱,相位谱)
- matlab练习程序(灰度拉伸)
- matlab练习程序(Floyd–Steinberg dithering)