Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
Matlab 如何在下面的代码中避免fliplr?_Matlab_Image Processing - Fatal编程技术网

Matlab 如何在下面的代码中避免fliplr?

Matlab 如何在下面的代码中避免fliplr?,matlab,image-processing,Matlab,Image Processing,我试图将图像中的一个区域分成左右两部分。但我要避免在每一边的中心有一定比例的柱子 所以, 我必须得到左侧和右侧的keep索引 我正在使用fliplr反转右侧的数组索引 获取(1:n_指数) 然后再次fliplr恢复正常 在以下代码中,我是否可以避免fliplr: img1 = imread('sample4.png'); keepPercent = 0.9; %90 on both sides columnsWithAllZeros = all(img1 == 0); left_idx = f

我试图将图像中的一个区域分成左右两部分。但我要避免在每一边的中心有一定比例的柱子

所以, 我必须得到左侧和右侧的keep索引

我正在使用
fliplr
反转右侧的数组索引

获取(1:n_指数)

然后再次
fliplr
恢复正常

在以下代码中,我是否可以避免
fliplr

img1 = imread('sample4.png');
keepPercent = 0.9; %90 on both sides
columnsWithAllZeros = all(img1 == 0);

left_idx = find(~columnsWithAllZeros,1,'first');
right_idx = find(~columnsWithAllZeros,1,'last');

cent_idx = floor(mean([left_idx,right_idx]));
left_to_cent_idxs = left_idx:cent_idx;
cent_to_right_idxs = cent_idx+1:right_idx;
cent_to_right_idxs = fliplr(cent_to_right_idxs); % flip

num_leftKeep_idxs = floor(keepPercent *length(left_to_cent_idxs));
num_rightKeep_idxs = floor(keepPercent *length(cent_to_right_idxs));

right_keepImg_idxs = left_to_cent_idxs(1:num_leftKeep_idxs);
left_keepImg_idxs = cent_to_right_idxs(1:num_rightKeep_idxs);
left_keepImg_idxs = fliplr(left_keepImg_idxs); %flip back This is not needed I Know

[leftBrain_img, rightBrain_img]  = deal(zeros(nrow, ncol, 'logical'));
leftBrain_img(:,left_keepImg_idxs) = img1(:,left_keepImg_idxs);
rightBrain_img(:,right_keepImg_idxs) = img1(:,right_keepImg_idxs);

rightBrain_img = cast(rightBrain_img,'uint16') .*img1;
leftBrain_img = cast(leftBrain_img,'uint16') .*img1;
figure,
subplot(131), imshow(img1,[])
subplot(132), imshow(rightBrain_img,[])
subplot(133), imshow(leftBrain_img,[])
示例图像可用

谢谢


Gopi

这是可以做到的,就像@rahnema1所说的那样。但问题是,如果可以用一种更快更简单的方式来做,为什么还要这样做呢! 看看这个代码-

img1 = imread('sample4.png');
keepPercent = 0.9; %90 on both sides
columnsWithAllZeros = all(img1 == 0);
leavepercent=1-keepPercent;
idx=minmax(find(columnsWithAllZeros==0));

cent_idx = floor(mean(idx));
left_keepImg_idxs1=idx(1):cent_idx-floor(leavepercent*(cent_idx-idx(1)+1));
right_keepImg_idxs1=cent_idx+1+floor(leavepercent*(idx(2)-cent_idx+1)):idx(2);

[leftBrain_img, rightBrain_img]  =deal(zeros(512, 512, 'logical'));
leftBrain_img(:,left_keepImg_idxs1) = img1(:,left_keepImg_idxs1);
rightBrain_img(:,right_keepImg_idxs1) = img1(:,right_keepImg_idxs1);

rightBrain_img = cast(rightBrain_img,'uint16') .*img1;
leftBrain_img = cast(leftBrain_img,'uint16') .*img1;
figure,
subplot(131), imshow(img1,[])
subplot(132), imshow(rightBrain_img,[])
subplot(133), imshow(leftBrain_img,[])

您是否尝试过
cent_to_right_idxs=right_idx:-1:cent_idx+1?@rahnema1,它能工作,谢谢。我想看看Matlab是否有类似于
num_list[-9:]
的numpy等价物,你建议的调整解决了我的问题,这就是我想要的,但你的答案看起来更可读,
left_keepImg_idxs=cent_to_right_idxs(end-num_rightKeep_idxs+1:end)
你可以使用这个
num_列表(end-9+1:end)
与示例相同。它的工作原理与预期相同,但我想看看是否可以像numpy一样从末尾进行索引<代码>数字列表[-9::]