【问题标题】:mask a portion of image in matlab?在matlab中屏蔽一部分图像?
【发布时间】:2015-01-13 15:16:38
【问题描述】:
Image1=imread('depthmp.png');
[row1,column1]=size(Image1);
B = imresize(Image1, [375 150]);
[row3,column3]=size(B);
subplot(2, 2, 1);
imshow(Image1);
mask = zeros(row3, column3, 'uint8');
mask(30:300, 5:150) = 255;
subplot(2, 2, 2);
imshow(mask);
subplot(2,2,3);
C=imadd(mask,Image1);
imshow(C);

这是我屏蔽一部分图像的代码。但出现错误。错误如下 “使用 imadd 时出错(第 69 行) X 和 Y 必须具有相同的大小 并且 class 或 Y 必须是标量 双倍的。” 请问谁能解决这个问题???

【问题讨论】:

  • mask(200:300,200:300)=255; 行不清楚。您将 mask 放大到 300 列。该错误表明maskImage1 的大小不同-您使用了resize,然后再次更改mask 的大小...也许您的意思不是写我提到,并写C=imadd(mask,B);
  • 我已经删除了那行。我的目标是获取图像的一部分。图像的剩余部分必须是黑色的。
  • 试试C=mask.*B; 请注意,mask 的尺寸为B,而不是Image1。另外,请注意,要获得原始图像的一部分,您需要将蒙版相乘,而不是相加。
  • 感谢您提供的信息。我尝试检查蒙版和 Image1 的大小。两者都相同。现在错误类似于“使用错误。* 矩阵尺寸必须一致。”我可能去了哪里错了??
  • BmaskImage1的尺寸是多少? C=mask.*Image1 有效吗?

标签: matlab image-processing


【解决方案1】:

所以基本上你希望数组的蒙面部分保持不变而不是蒙面变黑 - 对吗?
因此可以通过将掩码外的值替换为 0 值来轻松完成(我在博士工作中正在做类似的事情)
我将蒙面部分复制到黑色方块中

做这样的事情

Image1=imread('lena.jpg');
[image_rows,image_columns]=size(Image1);

mask_rows = 100;
mask_columns = 100;
mask_rows_position = 10;
mask_column_position = 10;  
C = zeros(image_rows,image_columns,'uint8'); %prepare black image
masked_image = Image1(mask_rows_position:mask_rows_position+mask_rows-1,mask_column_position:mask_column_position+mask_columns-1);
C(mask_rows_position:mask_rows_position+mask_rows-1,mask_column_position:mask_column_position+mask_columns-1) = masked_image;
imshow(C);

如果您需要解释什么,请毫不犹豫地询问 祝你好运

【讨论】:

  • 非常感谢宝贵的 cmets。它奏效了。我尝试了另一种方法,例如提取每个通道并进行掩蔽。但它很长..这段代码真的很好:)
【解决方案2】:

我想,如果我正确理解你的问题,你需要这个:

Image1=imread('lena1.tif');
[row1,column1]=size(Image1);
B = double(imresize(Image1, [375 150]));
[row3,column3]=size(B);
subplot(2, 2, 1);
imshow(Image1);
mask = zeros(row3, column3);
mask(30:300, 5:150) = 1;
subplot(2, 2, 2);
imshow(uint8(mask));
subplot(2,2,3);
C=B.*mask;
imshow(uint8(C));

这是一个使用双数进行计算并仅在需要显示图像时将其转换为 uint8 的问题。

【讨论】:

    【解决方案3】:

    Image1=imread('O.jpg'); Image1=rgb2gray(Image1); [行 1,列 1]=大小(图像 1); B = imresize(Image1, [375 450]); [row3,column3]=大小(B);子图(2、2、1); imshow(Image1);掩码 = 零(第 3 行,第 3 列,“uint8”);掩码(30:300、5:150)= 255;掩码=imresize(掩码,[375 450]);子图(2、2、2); imshow(掩码);子图(2,2,3); C=imadd(掩码,B); imshow(C);

    【讨论】:

    • 格式化您的代码并始终描述您在做什么或解释您的答案
    猜你喜欢
    • 2011-02-19
    • 2022-01-06
    • 2022-07-12
    • 2021-09-03
    • 2013-01-05
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多