Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 在Matlab中将图像分割成相等数量的部分_Image_Matlab_Image Processing_Computer Vision - Fatal编程技术网

Image 在Matlab中将图像分割成相等数量的部分

Image 在Matlab中将图像分割成相等数量的部分,image,matlab,image-processing,computer-vision,Image,Matlab,Image Processing,Computer Vision,我在Matlab中有lena图像。首先,我需要找到质心C,然后将图像分成相等数量的部分。我可以计算出图像的质心,但如何将图像分割成如下所示的相等数量的部分。请任何人帮帮我 谢谢 检查以下代码。我只是为灰度图像做的。您现在也可以将其更改为彩色图像。请检查并确认这是您想要的 clear all; i = rgb2gray(imread('hestain.png')); imshow(i); cr = floor(size(i,1)/2); cl = floor(size(i,2)/2); r

我在Matlab中有lena图像。首先,我需要找到质心C,然后将图像分成相等数量的部分。我可以计算出图像的质心,但如何将图像分割成如下所示的相等数量的部分。请任何人帮帮我

谢谢


检查以下代码。我只是为灰度图像做的。您现在也可以将其更改为彩色图像。请检查并确认这是您想要的

clear all;

i = rgb2gray(imread('hestain.png'));
imshow(i);

cr = floor(size(i,1)/2);
cl = floor(size(i,2)/2);

r = min(cr, cl);
a = 90;

r1 = cr;
c1 = size(i,2);
v1=[c1 r1]-[cl cr];

i2 = zeros(size(i,1),size(i,2),ceil(360/a));

for ri = 1:size(i,1)
    for ci = 1:size(i,2)
        v2=[ci ri]-[cl cr];
        a2 = mod(-atan2(v1(1)*v2(2)-v1(2)*v2(1), v1*v2'), 2*pi) * 180/pi;
        d2 = pdist([ci ri; cl cr],'euclidean');
        if d2<=r
            if ceil(a2/a)==0
                a2 =1;
            end
            i2(ri,ci,ceil(a2/a)) = i(ri,ci);
        end
    end
end

figure;
for i=1:360/a
    subplot(2,180/a,i);
    imshow(mat2gray(i2(:,:,i)));
end
全部清除;
i=rgb2gray(imread('hestain.png'));
imshow(i);
cr=地板(尺寸(i,1)/2);
cl=地板(尺寸(i,2)/2);
r=min(cr,cl);
a=90;
r1=cr;
c1=尺寸(i,2);
v1=[c1 r1]-[cl cr];
i2=零(尺寸(i,1),尺寸(i,2),ceil(360/a));
对于ri=1:尺寸(i,1)
对于ci=1:尺寸(i,2)
v2=[ci ri]-[cl cr];
a2=mod(-atan2(v1(1)*v2(2)-v1(2)*v2(1),v1*v2'),2*pi)*180/pi;
d2=pdist([ci-ri;cl-cr],'euclidean');
如果d2用于创建二进制扇区,并将结果扇区用于
索引

代码: 结果: 原始图像

在原始图像上绘制的分区

图像片段

更新 通过使用来自的Bresenham函数获取线的像素值

每行下的像素值


您希望如何处理包含空白的部分?白色?您希望最终图像的方向如何?如果你把它分成16个部分,并且没有水平/垂直切口,那么顶部/底部和左侧/右侧的白色部分将替换为零值。实际上,首先我想分割图像,如上图所示。然后我想计算每行下的像素,你只需要每行下的像素吗?这听起来像是一个不同的问题/方法,但在最后一步是的。。但我只想这样画。非常感谢您展示示例代码。我想知道,我如何画一条线来分割上图所示的图像?因为我的最终目标是计算线下的像素数,我怎么能从中计算出来?我想现在你可以很容易地继续这个代码:-)华塔尼:你能解释一下我如何用这个代码来做吗?一个简单的方法可能是,遍历图像中的每个像素,找到像素与中心形成的角度,如上述代码所示。然后,您可以根据需要计算每条线的像素数。如何计算每条彩色线下的像素数?@FrqKhan'under'?你这是什么意思?每个扇区的像素数?我的意思是,我想计算所有的像素值在每一行上的0、45、90度,我怎样才能得到不同角度线的值?@ FrqKhan考虑接受这个答案,如果你不再需要这个问题的帮助。
im = imread('peppers.png');
r = 300;
out1 = ones(max(size(im,1),r*2)+2,max(size(im,2),r*2)+2,3).*255;

xoffset = floor((size(out1,2)-size(im,2))/2);
yoffset = floor((size(out1,1)-size(im,1))/2);

out1(yoffset:yoffset+size(im,1)-1,xoffset:xoffset+size(im,2)-1,:) = im(:,:,:);
im = out1;

cy = floor(size(im,1)/2);
cx = floor(size(im,2)/2);

figure;
imshow(uint8(im));
hold on
pos = [cx-r+1 cy-r+1 r*2 r*2];
rectangle('Position',pos,'Curvature',[1 1]);
x1 = [-r, 0, -r*cosd(45), -r*cosd(45); r, 0, r*cosd(45), r*cosd(45)]+cx+1;
y1 = [0, -r, -r*sind(45), r*sind(45); 0, r, r*sind(45), -r*sind(45)]+cy+1;
plot(x1,y1);
hold off

figure;
for i = 0:45:315
    t = linspace(-i,-i-45,128);
    x = [cx, cx+r*cosd(t), cx];
    y = [cy, cy+r*sind(t), cy];
    bw = poly2mask( x, y, size(im,1),size(im,2));
    bw = repmat(bw,1,1,3);
    out = ones(size(im,1),size(im,2),size(im,3)).*155;
    out(bw) = im(bw);
    subplot(2,4,(i/45)+1); imshow(uint8(out));
end;
figure;
bw1 = zeros(size(im,1),size(im,2));
outmat = zeros(size(bw1));
[X,Y] = bresenham(cx+1-r,cy+1,cx+1+r,cy+1);
ind = sub2ind(size(outmat), Y, X);
outmat(ind) = 1;
[X,Y] = bresenham(cx+1,cy+1-r,cx+1,cy+1+r);
ind = sub2ind(size(outmat), Y, X);
outmat(ind) = 1;
[X,Y] = bresenham(cx+1-r*cosd(45),cy+1-r*sind(45),cx+1+r*cosd(45),cy+1+r*sind(45));
ind = sub2ind(size(outmat), Y, X);
outmat(ind) = 1;
[X,Y] = bresenham(cx+1-r*cosd(45),cy+1+r*sind(45),cx+1+r*cosd(45),cy+1-r*sind(45));
ind = sub2ind(size(outmat), Y, X);
outmat(ind) = 1;
se = strel('disk',5);    %// change the '5' value to affect thickness of the line
outmat = imdilate(outmat,se);
outmat = repmat(boolean(outmat),1,1,3);
outmat1 = zeros(size(outmat));
outmat1(outmat) = im(outmat);
imshow(uint8(outmat1));