【问题标题】:Find element in matrix according to column根据列查找矩阵中的元素
【发布时间】:2020-04-30 12:04:30
【问题描述】:

我现在正在“玩”图像处理。 我正在将 .jpg 图像(RGB)上传到 matlab。在那之后,我得到了高度、宽度和尺寸的信息。下一步是将其划分为 3 个矩阵(RGB)并使其变为灰色。最后一步是将其二值化。我有数据矩阵的二值化图像,其大小约为 900x1800。

我想从矩阵中提取数据

对于每一列,我想找到所有值等于1 的行。例如:对于列1,我想找到所有等于1 的行,对于列2 也是1(因为它是二进制矩阵。

img = imread(jpeg);
inf2=imfinfo(jpeg); 
[height, width,  dim] = size(img); 
if dim == 3 
    R=img(:, :, 1);
    G=img(:, :, 2);
    B=img(:, :, 3); 
    gray_img=rgb2gray(img); 
    level=graythresh(gray_img); 
    img_bin2 = im2bw(gray_img,level); 
    img_bin2= ~img_bin2;
%     imshow(img_bin2)

【问题讨论】:

  • 我不清楚你想从列中提取什么。你得到一个包含 1800 列的二进制图像,并且对于每一列你想要提取一些东西。但那是什么东西,你能再解释一下吗?
  • 好的,我想我现在明白了:对于第一列,您要查找值等于1 的所有行索引。对于第二列,您要查找所有等于 2 的行,依此类推。对吗?
  • 是的(就像你在第二条评论中所说的那样),我想将它保存到另一个矩阵中。
  • 或者只找到行中的第一个位置(对于每一列),其值等于 1

标签: image matlab image-processing matrix search


【解决方案1】:

也许您可以在矩阵M 上使用arrayfun(),如下所示

arrayfun(@(k) find(M(:,k)==k),1:size(M,2),"UniformOutput",false)

【讨论】:

    【解决方案2】:

    你可以这样做:

    data=randi(100,[10000 100]); % generate test data
    compared=bsxfun(@eq,data,1:size(data,2)); % compare each value to their respective row index
    result=cell(1,100); % create a cell array to store the result in. It needs to be a cell array instead of a matrix because each column can have a different amount of matches.
    for ii=1:size(data,2)
        result{ii}=find(compared(:,ii)); % loop over the columns and find the row indexes for each column
    end
    

    你也可以不使用 bsxfun 做同样的事情(也许这更容易理解):

    data=randi(100,[10000 100]);
    result=cell(1,100);
    for ii=1:size(data,2)
        temp=data(:,ii)==ii;
        result{ii}=find(temp);
    end
    

    【讨论】:

      【解决方案3】:

      我自己已经做到了,但是谢谢大家!

      max_val_of_1 = find(num_of_1, 1, 'last'); 
      for k = 1:width
        y_max_val = find(img_bin2(:,k),1,'first');
        y_val = max_val_of_1 - y_max_val;
        y(k) = y_val;
      end
      

      【讨论】:

        猜你喜欢
        • 2012-06-23
        • 1970-01-01
        • 2013-01-03
        • 1970-01-01
        • 1970-01-01
        • 2018-09-27
        • 2021-04-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多