imfill函数(matlab函数文件中的错误)
本文目录
matlab函数文件中的错误
照这个用function img = edu_imgpreprocess(I) %图像预处理Igray = rgb2gray(I); %转化成灰色图像Ibw = im2bw(Igray,graythresh(Igray));%转化成二值 graythresh返回图像的阈值和阈值的有效性Iedge = edge(uint8(Ibw));se = strel(’square’,3);Iedge2 = imdilate(Iedge, se); Ifill= imfill(Iedge2,’holes’););Ic = Ic’;Ic(:,3) = (mean(Ic.^2,2)).^(1/2);Ic(:,4) = 1:50;% Extra lines compare to example2 to extract all the components into an% cell arrayIc2 = sortrows(Ic,2);for cnt = 1:5 Ic2((cnt-1)*10+1:cnt*10,:) = sortrows(Ic2((cnt-1)*10+1:cnt*10,:),4);endIc3 = Ic2(:,1:2);ind = Ic2(:,4);for cnt = 1:50 img{cnt} = imcrop(Ibw,Ibox(:,ind(cnt)));end
如何编程实现只含0和1的矩阵做如下变换
先不考虑正负的问题,这个问题其实就是distance transform。所以你可以简单地使用b = bwdist(a, ’cityblock’)来实现。当然这样得到的结果和你的图1稍有不同,具体表现在:1. b中圈内部的值为1,2, ... 而非 2, 3 ....2. b中圈上的值为0,而非13. b中圈外的值为1, 2, ... 而非 0, -1, ....换句话说,只要把b中圈内的值+1,圈外的值取反+1即可(圈上的值取不取反都无所谓)。这点其实也不难,比如,你可以用imfill函数先将图中的所有圈内用1填充,得图c. 此时用~c作为逻辑下标,对a(~c)处的值取反,然后将该部分取反后的a整体+1即可。-------你要是有兴趣也可以自己实现一下bwdist和imfill,两者都能用BFS算法来解。你给的算法虽然可以出结果,但时间复杂度是O(n^3)的,用BFS可以降到O(n^2)。
更多文章:

win10激活工具kms(KMS Tools怎么激活win10系统)
2025年4月3日 06:20

html编辑器推荐(推荐一个好用的HTML编辑器,适合新手的那种谢谢!)
2025年4月10日 16:10

js字符串转数字的方法(js 数字、字符串、布尔值的转换方法(必看))
2025年3月21日 23:10

springmvc工作原理及其流程(SpringMVC的工作原理是什么样的,跟Spring的关系是怎么样的)
2025年2月22日 12:40

setpriority(java 里面,主线程的优先级可以设置吗)
2025年4月17日 08:10

教师法心得体会(教育政策法规与教师职业道德规范的学习心得,500字,谢谢)
2025年3月8日 21:40