对图像进行处理和分析,计算图中条纹间距

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

img

你好同学,这个主要的处理就是找出条带所在的位置和倾斜度

clc; clear
img = imread('pic.png'); % 读入图片pic.png比如说文件名是这个
figure(1);
imshow(img),title('原图');

%转化为灰度图像
img=rgb2gray(img);

%转化为二值图像
BW=imbinarize(img); 

%高通滤波去噪
sigma=1;%滤波器的标准差
parameters=double(3*sigma*2+1); % 模板尺寸
H=fspecial('gaussian', parameters, sigma);%滤波算子 %gaussian低通滤波器
BW=imfilter(BW,H,'replicate');

%骨化
BW1=bwmorph(BW,'skel',20);

%去毛刺(消除噪声)
BW2=bwmorph(BW1,'spur',18);
figure(2); clf
imshow(BW2)
[m,n,~] = size(BW2);
nbd = floor(n/5);
BW3  = BW2(nbd:end-nbd, nbd:end);
imshow(BW3);
[x,y] = find(BW3);
p = polyfit(x,y,1); % 这一步主要是为了求解倾斜度p(1) = tan(theta)
[X,Y] = meshgrid(1:n, 1:m);
[x0, y0] = meshgrid(1:n, floor(m/2));
z0 = interp2(X,Y,double(img)/255,x0,y0);
figure(3); clf
z0 = smooth(z0);
plot(x0,z0)
[pks, locs ]= findpeaks(z0); % 找到白值最高点
BandLength = mean(diff(locs))*cos(atan(p(1))) % 条带宽度,按照像素个数来的

img

img

img

最后得到的宽度是
BandLength =

65.136477530718693
我这里是这样一个像素的宽度