www.54333b.com21能不能简单图化

上下平方都一样 四百六十米管子分两层 大该需要多大的锅炉 多大的循环泵 能不能给我化个简单的平面图_百度知道
上下平方都一样 四百六十米管子分两层 大该需要多大的锅炉 多大的循环泵 能不能给我化个简单的平面图
上下平方都一样 四百六十米管子分两层 大该需要多大的锅炉 多大的循环泵 能不能给我化个简单的平面图纸.谢谢 农村的房子 小二层 分水器上下分别都装好了
怎么安装主水管是最合理的 ??很着急 求速度 谢谢 谢谢
我有更好的答案
你是460米管子还是460平方米房子?分两层还是每层460平方米?房子面积和房子所在地区(北方?南方?)是决定锅炉大小的关键依据。
为您推荐:
其他类似问题
循环泵的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。你的微笑像朵花
图像的细化主要是针对二值图而言
所谓骨架,可以理解为图像的中轴,,一个长方形的骨架,是它的长方向上的中轴线,
圆的骨架是它的圆心,直线的骨架是它自身,孤立点的骨架也是自身。
骨架的获取主要有两种方法:
(1)基于烈火模拟
设想在同一时刻,将目标的边缘线都点燃,火的前沿以匀速向内部蔓延,当前沿相交时火焰熄灭,
火焰熄灭点的结合就是骨架。
(2)基于最大圆盘
目标的骨架是由目标内所有内切圆盘的圆心组成
我们来看看典型的图形的骨架(用粗线表示)
细化的算法有很多种,但比较常用的算法是查表法
细化是从原来的图中去掉一些点,但仍要保持原来的形状。
实际上是保持原图的骨架。
判断一个点是否能去掉是以8个相邻点(八连通)的情况来作为判据的,具体判据为:
1,内部点不能删除
2,鼓励点不能删除
3,直线端点不能删除
4,如果P是边界点,去掉P后,如果连通分量不增加,则P可删除
看看上面那些点。
第一个点不能去除,因为它是内部点
第二个点不能去除,它也是内部点
第三个点不能去除,删除后会使原来相连的部分断开
第四个点可以去除,这个点不是骨架
第五个点不可以去除,它是直线的端点
第六个点不可以去除,它是直线的端点
对于所有的这样的点,我们可以做出一张表,来判断这样的点能不能删除
我们对于黑色的像素点,对于它周围的8个点,我们赋予不同的价值,
若周围某黑色,我们认为其价值为0,为白色则取九宫格中对应的价值
对于前面那幅图中第一个点,也就是内部点,它周围的点都是黑色,所以他的总价值是0,对应于索引表的第一项
前面那幅图中第二点,它周围有三个白色点,它的总价值为1+4+32=37,对应于索引表中第三十八项
我们用这种方法,把所有点的情况映射到0~255的索引表中
我们扫描原图,对于黑色的像素点,根据周围八点的情况计算它的价值,然后查看索引表中对应项来决定是否要保留这一点
我们很容易写出程序
import cvdef Thin(image,array):
h = image.height
w = image.width
iThin = cv.CreateImage(cv.GetSize(image),8,1)
cv.Copy(image,iThin)
for i in range(h):
for j in range(w):
if image[i,j] == 0:
for k in range(3):
for l in range(3):
if -1&(i-1+k)&h and -1&(j-1+l)&w and iThin[i-1+k,j-1+l]==0:
a[k*3+l] = 0
sum = a[0]*1+a[1]*2+a[2]*4+a[3]*8+a[5]*16+a[6]*32+a[7]*64+a[8]*128
iThin[i,j] = array[sum]*255
return iThin
def Two(image):
w = image.width
h = image.height
size = (w,h)
iTwo = cv.CreateImage(size,8,1)
for i in range(h):
for j in range(w):
iTwo[i,j] = 0 if image[i,j] & 200 else 255
return iTwoarray = [0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,\
1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,\
0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,\
1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,\
1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,1,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,\
1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,\
0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,\
1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,\
1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,\
1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,\
1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,0,\
1,1,0,0,1,1,1,0,1,1,0,0,1,0,0,0]
image = cv.LoadImage('pic3.jpg',0)iTwo = Two(image)iThin = Thin(iTwo,array)cv.ShowImage('image',image)cv.ShowImage('iTwo',iTwo)cv.ShowImage('iThin',iThin)cv.WaitKey(0)
我们来看看运行效果:
(下图最左边的原图若涉及版权问题,请作者与我联系,谢谢)
效果差强人意,总觉得有点不对头,但又说不出哪里不对
好吧,我们来看看最简单的事例
按照前面的分析,我们应该得到一条竖着的线,但实际上我们得到了一条横线
我们在从上到下,从左到右扫描的时候,遇到第一个点,我们查表可以删除,遇到第二个点,我们查表也可以删除,整个第一行都可以删除
于是我们查看第二行时,和第一行一样,它也被整个删除了。这样一直到最后一行,于是我们得到最后的结果是一行直线
解决的办法是:
在每行水平扫描的过程中,先判断每一点的左右邻居,如果都是黑点,则该点不做处理。另外,如果某个黑店被删除了,则跳过它的右邻居,处理下一点。对矩形这样做完一遍,水平方向会减少两像素。
然后我们再改垂直方向扫描,方法一样。
这样做一次水平扫描和垂直扫描,原图会&瘦&一圈
多次重复上面的步骤,知道图形不在变化为止
这一改进让算法的复杂度的运行时间增大一个数量级
我们来看看改进后的算法:
import cvdef VThin(image,array):
h = image.height
w = image.width
for i in range(h):
for j in range(w):
if NEXT == 0:
M = image[i,j-1]+image[i,j]+image[i,j+1] if 0&j&w-1 else 1
if image[i,j] == 0
and M != 0:
for k in range(3):
for l in range(3):
if -1&(i-1+k)&h and -1&(j-1+l)&w and image[i-1+k,j-1+l]==255:
a[k*3+l] = 1
sum = a[0]*1+a[1]*2+a[2]*4+a[3]*8+a[5]*16+a[6]*32+a[7]*64+a[8]*128
image[i,j] = array[sum]*255
if array[sum] == 1:
return image
def HThin(image,array):
h = image.height
w = image.width
for j in range(w):
for i in range(h):
if NEXT == 0:
M = image[i-1,j]+image[i,j]+image[i+1,j] if 0&i&h-1 else 1
if image[i,j] == 0 and M != 0:
for k in range(3):
for l in range(3):
if -1&(i-1+k)&h and -1&(j-1+l)&w and image[i-1+k,j-1+l]==255:
a[k*3+l] = 1
sum = a[0]*1+a[1]*2+a[2]*4+a[3]*8+a[5]*16+a[6]*32+a[7]*64+a[8]*128
image[i,j] = array[sum]*255
if array[sum] == 1:
return image
def Xihua(image,array,num=10):
iXihua = cv.CreateImage(cv.GetSize(image),8,1)
cv.Copy(image,iXihua)
for i in range(num):
VThin(iXihua,array)
HThin(iXihua,array)
return iXihuadef Two(image):
w = image.width
h = image.height
size = (w,h)
iTwo = cv.CreateImage(size,8,1)
for i in range(h):
for j in range(w):
iTwo[i,j] = 0 if image[i,j] & 200 else 255
return iTwoarray = [0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,\
1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,\
0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,\
1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,\
1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,1,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,\
1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,\
0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,\
1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,\
1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,\
1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,\
1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,0,\
1,1,0,0,1,1,1,0,1,1,0,0,1,0,0,0]
image = cv.LoadImage('pic3.jpg',0)iTwo = Two(image)iThin = Xihua(iTwo,array)cv.ShowImage('image',image)cv.ShowImage('iTwo',iTwo)cv.ShowImage('iThin',iThin)cv.WaitKey(0)
我们在调用函数的时候可以控制扫描的次数,而不是判断是否扫描完成
好啦,我们来看看运行效果吧。
效果确实比刚才好多了
我们来看看对复杂图形的效果
(上图中左图若有版权问题,请与我联系,谢谢)
好啦,图像的细化就讲到这里了
之后一段时间要准备考研,虽然并不认为自己还来得及复习,但总得做出点姿态
呵呵,可能之后两个星期不再更新
阅读(...) 评论()简单布置房间图画
短信快捷登录
请输入密码
您还可以使用合作账号登录网站:
还没有一起网帐号?10秒钟,
微信扫码&快速登录
验证即登录,未注册将自动创建一起网帐号
获取动态密码
微信账号登陆
微信扫一扫绑定/登录
与简单布置房间图画相关的问题约13306个
最近更新:日
你的装修预算约 ? 万元
整体橱柜、马桶、瓷砖等
人工费+施工辅材
设计费:?元
(测量、设计、报价)
A:先简单的贴点墙纸。选个自己喜欢的~~然后买张大床。在买张小桌子。4把小椅子。如果是*的话建议在买个大镜子。化装台就免了。在买几副山水或者抽象话贴起
A:符合自己就是最美的
A: 简单装修需要定图纸:、平面布置图;二、面材质铺设图;三、顶面材料布置图;四、顶面灯具布置图及关连线图;五、插座布置图猪 八 戒网发布任务、理价位佣金自设计师与联系
1、女孩子都比较喜欢温馨、浪漫的房间吧,所以在房间布置的时候呢,不妨把房间装扮得温馨一些。墙面用浅色系比较好
2、家具用糖果色的不错呀,还有买个好看的台灯、闹钟等等一些小饰品。
3、还有女孩子都喜欢布娃娃吧,买个毛绒玩具(毛毛熊之类的,关键是自己喜欢的),放在床上也行。
A:房间简单布置:1、先出方案
总的来说掌握了装修的流程才开始装修是最好的,毕竟装修房子是一个系统的工程。当业主拿到新房钥匙时,就需要通过房屋的构造及大致的空间布局来判断自己需要什么样的生活设施,这些心里面都要有个数。
A:不锈钢钢化玻璃门的做法的步骤:
(一)施工准备
1、技术准备
熟悉钢化玻璃门的安装工艺流程和施工图纸的内容,检查预埋件的安装是否齐全、准确,依据施工技术交底做好施工的各项准备。
2、材料准备
(1)钢化玻璃门所采用的玻璃品种、颜色及各项性能应符合设计要求及相关标准规定,并具有产品合格证及检测报告。玻璃的裁割、倒角及钻孔应尽量*完成。
(2)不锈钢或其他有色金属型材的门框、限位槽及板,应符合设计及相关标准的规定。
(3)辅助材料如木方、玻璃胶、地弹簧、木螺钉、自攻螺钉等应符合设计要求及相关标准的规定。
3、机具准备
常用工具为手电钻、冲击钻、气砂*机、小型电焊机、射钉*、钳子、螺丝*、拖线板、线坠、水平尺、墨斗、玻璃吸盘、打胶筒等。
4、作业条件
(1)墙、地面的饰面已施工完毕,现场已清理干净,并经验收合格。
(2)门框的不锈钢或其他饰面已经完成。门框预留出用来安装固定玻璃板的限位槽已预留好。
(3)活动玻璃门扇安装前,应先将地面上的地弹簧和门扇顶面横梁的*销安装固定完毕,两者必须在同一轴线,安装时应吊垂线检查,做到准确无误,地弹簧转轴与*销为同一中线.
1、工艺流程
划线*→裁割玻璃→固定底托→安装固定扇→注胶封口→固定门扇上下横档→门扇固定→安装拉手
2、*作工艺
(1)划线*。在玻璃门扇的上下金属横档内划线,按线固定转销的销孔板和地弹簧的转动轴连接板。具体*作可按照地弹簧产品安装说明。
(2)裁割玻璃。玻璃的安装尺寸,应从按在位置的底部、中部的顶部进行测量,选择最小尺寸为玻璃板宽度的切割尺寸。如果在上、中、下测得的尺寸一致,其玻璃宽度的裁割应比实测尺寸小3mm~5mm,玻璃板的高度方向裁割,应小于实测尺寸的3mm~5mm。玻璃板裁割后,应将其四角做倒角处理,倒角宽度为2mm,如若在现场自行倒角,应手握细砂*块做缓慢细磨*作,防止崩边崩角。
(3)活动扇的高度尺寸在裁割玻璃板时应注意包括插入上下横档的安装部位。一般情况下,玻璃高度尺寸应小于测量尺寸5mm左右,以便于安装时进行*调节。
(4)高度底托。不锈钢(或铜)饰面的木底托,可用木楔加钉的方法固定于地面,然后再用*胶将不锈钢饰面板粘卡在木方上。如果是采用铝合金方管,可用铝角将其固定在框住上,或用木螺钉固定于地面埋入的木楔上。
(5)安装固定扇用玻璃吸盘将玻璃板吸紧,然后将玻璃就位。先把玻璃板上边插入门框中的限位槽内,然后将其下边安放于木底托上的不锈钢包面对口缝内。
在底托上固定玻璃板的方法为:在底托木方上钉木条,距玻璃板面4mm左右然后在木条上涂刷*胶,将饰面不锈钢板片粘卡在木方上面。
(6)注胶封口。玻璃门固定部分的玻璃板就为以后,即在顶部限位槽处和底托固定处,以及玻璃板与框柱的对缝处等各缝隙处,均注胶密封。首先将玻璃胶开封后装入打胶抢内,即用胶抢的后压杆端头板顶住玻璃胶罐的底部;然后一只手托住胶抢身,另一只手握着注胶压柄不断松压循环地*作压柄,将玻璃胶注于需要封口的缝隙端。由需要注胶的缝隙端头开始,顺缝隙匀速移动,使玻璃胶在缝隙处形成一条匀速的直线。最后用塑料片刮去多余的玻璃胶,用*片擦净胶迹,门上固定部分的玻璃板需要对接时,其接缝应有3mm~5mm的宽度,玻璃板边都有进行倒角处理。当玻璃板留缝*并安装稳固后即将玻璃胶注入其对接的缝隙,用塑料片在玻璃板对缝的两边把胶刮平,用*片擦净料残迹。
(7)固定门扇上下横档。门扇高度确定无误后,即可固定上下横档,在玻璃板与金属横档内的两侧空隙处,由两边同时插入小木条,轻敲稳实,然后在小木条、门扇玻璃及横档之间形成的缝隙中注入玻璃胶。
(8)活动扇固定。先将门框横梁上的*销本身的调节螺钉调整出横梁平面1mm
~2mm,再将玻璃门扇竖起来,把门扇下横档内的转动销连接件的孔位对准地弹簧的转动销轴,并转动门扇将孔位套入销转动轴上。然后把门扇转动90°使之与门框横梁成直角,把门扇上横档中的转动连接件的孔对准门框横梁上的定
位销,将*销插入孔内15mm左右(调动*销上的调节螺钉)。
(9)安装拉手。钢化玻璃门扇上的拉手孔洞,一般是事先订购时就*好的,拉手连接部分插入洞时不能很紧,应有松动。安装前在拉手插入玻璃的部分涂少许玻璃胶;如若插入过松,可在插入本分裹上软胶带。拉手组装时,其根部与玻璃贴紧后再拧紧固定螺钉。
A: 周围的东西随意建议画带阳台的房间,大窗的外面是后院,上面摆着你想要的东西。屋内的窗边是书桌,或带大窗户的房间
A:1、重叠法:充分利用空间,将一些家具合并、兼用,以节省占地面积。小房间的空间小,易产生拥挤感,可选用上下重叠的组合家具,尽量贴墙放置,以充分利用室内边角面积,使居室中间形成较大的空地,便于室内活动和交通往来。
2、图案法:视觉上的错觉常常可以用来改变人对空间高低、大小的正确估计。墙壁上的纹样不同,会使人对居室空间产生扩大或缩小、升高或降低的效果。因此,对小房间来说,选择和运用带有简单的小花或有菱形图案的壁纸进行装饰,有助于减弱小房间给人的压缩感。
3、色彩法:室内色彩的处理是一种有明显效果的装饰手段,不同的色彩赋予人的距离感、温度感以及重量感各不相同。例如:红、黄、橙等色使人感觉温暖;蓝、青、绿等色使人感觉寒冷。高明度的色彩使人感觉扩大,低明度的色彩使人感觉缩小,暖色调感觉凸出,冷色调感觉后退。此外,色彩还有重量感。明色彩感觉轻,暗色调感觉重;耀眼的暖色调感觉重,淡雅的冷色调感觉轻。
4、正确运用色彩的特有性质可使小面积房间在感觉上比实际面积大得多。一般宜用亮度高的淡色作小房间居室的主要色,使空间显得开阔、明快。也可使用中性的浅冷色调来改变空间的紧迫感,增加室内景深。对一些小而且矮的房间,更应利用远感色,即把天花板和墙面涂成同一浅冷色,以求得围护面的贯通,达到空间开阔的效果。当然,室内用色还要结合朝向,南向的室内,由于经常有阳光照射,一般用中性较浅的冷色调为宜,如淡青、淡蓝、淡绿等。北向的室内,由于射入的光线少,室内空间若用冷色调,就会显得阴冷,因此,用浅土黄、浅米黄、浅褐色等处理为佳。
5、小房间里还可以用水平镜面为壁檐,或用镜子悬挂于迎门的墙上,使人一进门就有一种开阔的视感效果。
希望我的回答能帮到您
A: 我北京我前段间刚刚求婚功我找北京我要求婚事务所都帮我策划包括布置求婚现场我自肯定想周
A: 下 一个婚礼纪app看看
A:如果是*。可以以粉蓝为主调,增加柔美感。中间可以用民族风的帘珠,或是以有机玻璃组合相隔离。
其实,我个人认为喜欢兰色不一定要主题色要纯兰。颜色以兰为中心的转变可以体现出特别的味道。
新房以温馨为主,考虑到小孩子,颜色还是不易过于清冷。
A: 就是那种一个小盒子的,在地下用蜡烛摆成 I LOVE YOU O字要用心代替,呵呵这个很简单,在床上用花摆成一个心,不过我没有什么感觉,买两束花,你多买一点蜡烛,花瓣在蜡烛外围,然后给你女朋友开门就可以了我相信你女朋友会哭的,因为这一招有一个女孩对我刚用过,等你们到房间的时候你就先进去,先把蜡烛点好,蜡烛放在里面,在房间布置好,
A: 点上蜡烛!可以给她个烛光晚餐!开瓶葡萄酒!点点菜!把灯关了买个蛋糕
A:diy房间布置首先应该决定房间的风格,看自己喜欢什么样的,我比较喜欢简约的房间布置,最好是黑白色调的,并且房间的家具摆设最好也与房子的风格相配合,最好是简单的1书柜什么的
A:1、女孩子都比较喜欢温馨、浪漫的房间吧,所以在房间布置的时候呢,不妨把房间装扮得温馨一些。墙面用浅色系比较好
2、家具用糖果色的不错呀,还有买个好看的台灯、闹钟等等一些小饰品。
3、还有女孩子都喜欢布娃娃吧,买个毛绒玩具(毛毛熊之类的,关键是自己喜欢的),放在床上也行。
希望我的回答能帮到您
A:你好,我觉得要从小的家居饰品入手
  摆饰、抱枕、桌巾、小挂饰等中小型饰品是最容易上手的布置单品,布置入门者可以从这些先着手,再慢慢扩散到大型的家具陈设。小的家居饰品往往会成为视觉的焦点,更能体现主人的兴趣和爱好。用壁纸装扮卧室有看头
经典的吊灯增添炫色
多款儿童卧室搭配设计别样卫浴间享受展示个人品位
可以在窗前挂一串风铃,自己动手做或买都行,室内装扮最好以粉色为主,*的显得可爱,橙色等一些鲜亮的颜色作点缀,会显得可爱.室内还能摆一些自己喜欢的盆景或鱼缸.能使室内空气湿润,不会干燥.
A:1房间的装修一般情况下是注重软饰的,硬饰倒不是那么好的,局部效果的装修,这个部分的话,我们建议是使用一些视觉的巧妙来达到这个温馨的特点的,比如一些色彩还有线条的一个搭配的,比如从门外进来第一眼是非常重要的,那么就可以把最显眼的窗帘调节成暖黄色的比较好2家具的话呢,对一个房间来说可以起到点睛的作用的,选择一些精致的家具比较好3加入采光不好,采光不好,但打上灯光后自然柔和,就能称得上视觉效果良好。
免费获取靠谱装修设计
个免费名额
我们承诺:一起装修网提供该项免费服务,绝不产生任何费用。
抢免费设计名额
每天限50个
请放心填写您的隐私将被严格保密
7年服务700万用户,中国家装十大电商平台
重复报名!
亲,您已经报过名啦,给别人留点机会呗
我们还有更多精彩活动,简单图形的排列规律_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
简单图形的排列规律
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩1页未读,
定制HR最喜欢的简历
你可能喜欢博客分类:
图像的细化主要是针对二值图而言
所谓骨架,可以理解为图像的中轴,,一个长方形的骨架,是它的长方向上的中轴线,
圆的骨架是它的圆心,直线的骨架是它自身,孤立点的骨架也是自身。
骨架的获取主要有两种方法:
(1)基于烈火模拟
设想在同一时刻,将目标的边缘线都点燃,火的前沿以匀速向内部蔓延,当前沿相交时火焰熄灭,
火焰熄灭点的结合就是骨架。
(2)基于最大圆盘
目标的骨架是由目标内所有内切圆盘的圆心组成
我们来看看典型的图形的骨架(用粗线表示)
细化的算法有很多种,但比较常用的算法是查表法
细化是从原来的图中去掉一些点,但仍要保持原来的形状。
实际上是保持原图的骨架。
判断一个点是否能去掉是以8个相邻点(八连通)的情况来作为判据的,具体判据为:
1,内部点不能删除
2,鼓励点不能删除
3,直线端点不能删除
4,如果P是边界点,去掉P后,如果连通分量不增加,则P可删除
看看上面那些点。
第一个点不能去除,因为它是内部点
第二个点不能去除,它也是内部点
第三个点不能去除,删除后会使原来相连的部分断开
第四个点可以去除,这个点不是骨架
第五个点不可以去除,它是直线的端点
第六个点不可以去除,它是直线的端点
对于所有的这样的点,我们可以做出一张表,来判断这样的点能不能删除
我们对于黑色的像素点,对于它周围的8个点,我们赋予不同的价值,
若周围某黑色,我们认为其价值为0,为白色则取九宫格中对应的价值
对于前面那幅图中第一个点,也就是内部点,它周围的点都是黑色,所以他的总价值是0,对应于索引表的第一项
前面那幅图中第二点,它周围有三个白色点,它的总价值为1+4+32=37,对应于索引表中第三十八项
我们用这种方法,把所有点的情况映射到0~255的索引表中
我们扫描原图,对于黑色的像素点,根据周围八点的情况计算它的价值,然后查看索引表中对应项来决定是否要保留这一点
我们很容易写出程序
import cvdef Thin(image,array):
h = image.height
w = image.width
iThin = cv.CreateImage(cv.GetSize(image),8,1)
cv.Copy(image,iThin)for i in range(h):for j in range(w):if image[i,j] == 0:
a = [1]*9for k in range(3):for l in range(3):if -1&(i-1+k)&h and -1&(j-1+l)&w and iThin[i-1+k,j-1+l]==0:
a[k*3+l] = 0
sum = a[0]*1+a[1]*2+a[2]*4+a[3]*8+a[5]*16+a[6]*32+a[7]*64+a[8]*128
iThin[i,j] = array[sum]*255return iThin
def Two(image):
w = image.width
h = image.height
size = (w,h)
iTwo = cv.CreateImage(size,8,1)for i in range(h):for j in range(w):
iTwo[i,j] = 0 if image[i,j] & 200 else 255return iTwoarray = [0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,\1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,\
0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,\1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,\1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,1,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,\1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,\
0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,\1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,\1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,\1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,\1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,0,\1,1,0,0,1,1,1,0,1,1,0,0,1,0,0,0]image = cv.LoadImage('pic3.jpg',0)iTwo = Two(image)iThin = Thin(iTwo,array)cv.ShowImage('image',image)cv.ShowImage('iTwo',iTwo)cv.ShowImage('iThin',iThin)cv.WaitKey(0)
我们来看看运行效果:
(下图最左边的原图若涉及版权问题,请作者与我联系,谢谢)
效果差强人意,总觉得有点不对头,但又说不出哪里不对
好吧,我们来看看最简单的事例
按照前面的分析,我们应该得到一条竖着的线,但实际上我们得到了一条横线
我们在从上到下,从左到右扫描的时候,遇到第一个点,我们查表可以删除,遇到第二个点,我们查表也可以删除,整个第一行都可以删除
于是我们查看第二行时,和第一行一样,它也被整个删除了。这样一直到最后一行,于是我们得到最后的结果是一行直线
解决的办法是:
在每行水平扫描的过程中,先判断每一点的左右邻居,如果都是黑点,则该点不做处理。另外,如果某个黑店被删除了,则跳过它的右邻居,处理下一点。对矩形这样做完一遍,水平方向会减少两像素。
然后我们再改垂直方向扫描,方法一样。
这样做一次水平扫描和垂直扫描,原图会“瘦”一圈
多次重复上面的步骤,知道图形不在变化为止
这一改进让算法的复杂度的运行时间增大一个数量级
我们来看看改进后的算法:
import cvdef VThin(image,array):
h = image.height
w = image.width
NEXT = 1for i in range(h):for j in range(w):if NEXT == 0:
NEXT = 1else:
M = image[i,j-1]+image[i,j]+image[i,j+1] if 0&j&w-1 else 1if image[i,j] == 0
and M != 0:
a = [0]*9for k in range(3):for l in range(3):if -1&(i-1+k)&h and -1&(j-1+l)&w and image[i-1+k,j-1+l]==255:
a[k*3+l] = 1
sum = a[0]*1+a[1]*2+a[2]*4+a[3]*8+a[5]*16+a[6]*32+a[7]*64+a[8]*128
image[i,j] = array[sum]*255if array[sum] == 1:
NEXT = 0return imagedef HThin(image,array):
h = image.height
w = image.width
NEXT = 1for j in range(w):for i in range(h):if NEXT == 0:
NEXT = 1else:
M = image[i-1,j]+image[i,j]+image[i+1,j] if 0&i&h-1 else 1
if image[i,j] == 0 and M != 0:
a = [0]*9for k in range(3):for l in range(3):if -1&(i-1+k)&h and -1&(j-1+l)&w and image[i-1+k,j-1+l]==255:
a[k*3+l] = 1
sum = a[0]*1+a[1]*2+a[2]*4+a[3]*8+a[5]*16+a[6]*32+a[7]*64+a[8]*128
image[i,j] = array[sum]*255if array[sum] == 1:
NEXT = 0return imagedef Xihua(image,array,num=10):
iXihua = cv.CreateImage(cv.GetSize(image),8,1)
cv.Copy(image,iXihua)for i in range(num):
VThin(iXihua,array)
HThin(iXihua,array)return iXihuadef Two(image):
w = image.width
h = image.height
size = (w,h)
iTwo = cv.CreateImage(size,8,1)for i in range(h):for j in range(w):
iTwo[i,j] = 0 if image[i,j] & 200 else 255return iTwoarray = [0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,\1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,\
0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,\1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,\1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,1,\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,\1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,\
0,0,1,1,0,0,1,1,1,1,0,1,1,1,0,1,\1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,\1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,\1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,\1,1,0,0,1,1,0,0,1,1,0,1,1,1,0,0,\1,1,0,0,1,1,1,0,1,1,0,0,1,0,0,0]image = cv.LoadImage('pic3.jpg',0)iTwo = Two(image)iThin = Xihua(iTwo,array)cv.ShowImage('image',image)cv.ShowImage('iTwo',iTwo)cv.ShowImage('iThin',iThin)cv.WaitKey(0)
我们在调用函数的时候可以控制扫描的次数,而不是判断是否扫描完成
好啦,我们来看看运行效果吧。
效果确实比刚才好多了
我们来看看对复杂图形的效果
(上图中左图若有版权问题,请与我联系,谢谢)
好啦,图像的细化就讲到这里了
之后一段时间要准备考研,虽然并不认为自己还来得及复习,但总得做出点姿态
呵呵,可能之后两个星期不再更新
浏览: 239258 次
来自: 北京
good good good
好样的。非常感谢楼主
好样的。谢谢~
博主说的不错,我在实现瀑布流布局时也用的masonry插件,有 ...
除非玩游戏,不然没啥win的事情,或者用win的银行客户端,通 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 5433 的文章

 

随机推荐