matlab 采用的什么matlab孔洞填充 原理算法

如何用matlab求图形边界和对图形进行填充_百度知道查看: 4227|回复: 4|关注: 0
如何用简单快速的方法填充圆形区域? 有什么matlab命令?
<h1 style="color:# 麦片财富积分
新手, 积分 20, 距离下一级还需 30 积分
1.JPG (1.22 KB, 下载次数: 66)
10:58 上传
2.JPG (2.55 KB, 下载次数: 19)
10:58 上传
3.JPG (2.55 KB, 下载次数: 19)
10:58 上传
& && && && && && && && & 图1& && && && && && && && && && && && && && && && && && &&&图2& && && && && && && && && && && && && && && && && && && && && && && & 图3
如原图片1, 已知圆的半径和圆心位置,如何快速 填充圆获得图2所示图像。 (用提取距离&r 比较的方式太慢了),用画圆填充的方式可以实现,但是如何填充圆外的区域呢?(获得图3所示图像)。
[ 本帖最后由 pumpkin8000 于
14:14 编辑 ]
<h1 style="color:# 麦片财富积分
没人知道吗
关注者: 182
% By lyqmath @ Matlab中文论坛
I = imread('c:\\ce1.jpg');
J = zeros(size(I, 1), size(I, 2));
cen = [size(I, 2)/2, size(I, 1)/2];
r = min([size(I, 1) size(I, 2)])/5;
t = 0 : 0.01 : 2*
x = cen(1) + r*cos(t);
y = cen(2) + r*sin(t);
x = round(x); y = round(y);
for i = 1 : length(x)
& & J(y(i), x(i)) = 1;
end
J = logical(J); J = imfill(J, 'holes');
J = ~J;
I1 = I .* uint8(cat(3, J, J, J));
I2 = I .* uint8(~cat(3, J, J, J));
subplot(1, 3, 1); imshow(I); title('By lyqmath @ Matlab中文论坛', 'FontWeight', 'Bold', 'Color', 'r');
subplot(1, 3, 2); imshow(I1); title('By lyqmath @ Matlab中文论坛', 'FontWeight', 'Bold', 'Color', 'r');
subplot(1, 3, 3); imshow(I2); title('By lyqmath @ Matlab中文论坛', 'FontWeight', 'Bold', 'Color', 'r');
复制代码
未命名.JPG (30.81 KB, 下载次数: 0)
14:39 上传
<h1 style="color:# 麦片财富积分
非常感谢lyqmath&&老师,我已经从你的程序中收到启发,完成了任务。
您太厉害了,期待下一次的学习。
<h1 style="color:# 麦片财富积分
关注者: 1
请问 如何填充颜色后,显示两种颜色混合的颜色?例如白色+黑色为灰色
站长推荐 /1
Powered byMATLAB作业数字填充问题算法分析_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
MATLAB作业数字填充问题算法分析
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢MATLAB中imfill()函数解释_百度知道1806人阅读
图形图像(59)
OpenCV(61)
&#65279;&#65279;
&&在Matlab下,使用imfill可以很容易的完成孔洞填充操作,感觉这是一个极为常用的方法,然而不知道为什么Opencv里面却没有集成这个函数。在网上查了好多关于Opencv下的孔洞填充方法,大部分使用轮廓查找方法去做的,但对于这种方法,总感觉不是特别好。之前了解过冈萨雷斯那本书上的孔洞填充算法,所以想着手重新写一个。这里借鉴了冈萨雷斯书上的集合运算方法(并不完全一样)
&&&&大致思路如下:
&&&&0,&设原图像为&A。
&&&&1,&首先A向外延展一到两个像素,并将&#20540;填充为背景色(0),标记为B。
&&&&2,&使用floodFill函数将B的大背景填充,填充&#20540;为前景色(255),种子点为(0,0)即可(步骤一可以确保(0,0)点位于大背景),标记为C。
&&&&3,&将填充好的图像裁剪为原图像大小(去掉延展区域),标记为D。
&&&&4,&将D取反与A相加即得填充的图像,E=A|(~D)。
// fillhole.cpp : 定义控制台应用程序的入口点。
#include &stdafx.h&
#include &opencv2/core/core.hpp&
#include &opencv2/highgui/highgui.hpp&
#include &opencv2/imgproc/imgproc.hpp&
#pragma comment(lib,&opencv_core2410d.lib&)
#pragma comment(lib,&opencv_highgui2410d.lib&)
#pragma comment(lib,&opencv_imgproc2410d.lib&)
void fillHole(const Mat srcBw, Mat &dstBw)
Size m_Size = srcBw.size();
Mat Temp=Mat::zeros(m_Size.height+2,m_Size.width+2,srcBw.type());//延展图像
srcBw.copyTo(Temp(Range(1, m_Size.height + 1), Range(1, m_Size.width + 1)));
cv::floodFill(Temp, Point(0, 0), Scalar(255));
Mat cutI//裁剪延展的图像
Temp(Range(1, m_Size.height + 1), Range(1, m_Size.width + 1)).copyTo(cutImg);
dstBw = srcBw | (~cutImg);
int main()
Mat img=cv::imread(&23.jpg&);
cv::cvtColor(img, gray, CV_RGB2GRAY);
cv::threshold(gray, bw, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
fillHole(bw, bwFill);
imshow(&填充前&, gray);
imshow(&填充后&, bwFill);
waitKey();
我调试好的工程:
http://download.csdn.net/detail/wangyaninglm/9389329
&#65279;&#65279;
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
公众号:&&&&&老王和他的IT界朋友们
欢迎投稿:&&
我们想用一段音乐,几张图片,
些许文字绘制的IT圈心路历程,
为攻城狮,为程序员带来更多的人文关怀。
投稿原创文章有稿费,杂志等福利!!!
访问:525481次
积分:7997
积分:7997
排名:第1767名
原创:153篇
转载:50篇
译文:63篇
评论:409条
文章:38篇
阅读:31264
阅读:28909
文章:10篇
阅读:27405
阅读:12996
文章:46篇
阅读:198021
(5)(3)(5)(4)(7)(8)(4)(4)(4)(4)(4)(4)(5)(4)(7)(13)(14)(17)(12)(5)(4)(22)(14)(12)(5)(15)(1)(3)(5)(1)(3)(1)(3)(3)(3)(1)(1)(2)(1)(5)(4)(5)(1)(1)(9)

我要回帖

更多关于 matlab孔洞填充 原理 的文章

 

随机推荐