图片单一背景色-Matlab

时间:2019-07-06 14:48:20

标签: matlab

在下面的代码中,我旋转了一张图像。如何获得单一的背景颜色(白色或黑色)?

代码:

close all;
clear;
clc;

url='http://www.clker.com/cliparts/T/i/o/c/X/Q/airplane-md.png';
RI = imread(url);
I = rgb2gray(RI);

BI = imbinarize(I);

LI = bwlabel(BI);
mea = regionprops(LI, 'All');
RI = imrotate(RI, -mea(1).Orientation,'loose');
imshow(RI);

2 个答案:

答案 0 :(得分:2)

鉴于图像是一个简单的徽标(例如,与照片相对),您可以使用逻辑索引将通过旋转而添加的所有黑色像素更改为白色像素。

我没有图像处理工具箱,因此无法运行您的代码,但是下面的示例应说明:

%Load RBG image to test on
RI = imread('peppers.png');
%Create black region to remove
RI(100:150,100:150,:) = 0;

figure()
imshow(RI)
title('Original Image')

%Replace all black pixels with white
inds = sum(RI,3)==0;
RI_new = RI;
RI_new(repmat(inds,1,1,3))=255;

figure()
imshow(RI_new)
title('New Image')

与@SardarUsama的答案相比,它的缺点是假定原始图像中没有黑色像素,但是仅使用内置的Matlab函数具有优势。

编辑:已更新,以在RGB图像而不是灰度上显示示例

答案 1 :(得分:1)

您的原始图像有白色背景。旋转时,背景中会出现黑色像素,以填充图像矩阵。这可能是由于旋转的图像矩阵的预分配是用零完成的,然后将其转换为黑色(可能在imrotatemex以及imrotate的116和118行中实现)。您可以使用imrotate中的these alternate implementations,但为矩阵预先分配1(用于双精度数据)或255(用于uint8数据)。

例如,在Rody's implementation的第31行,即:

imagerot = zeros([max(dest) p],class(image));

将此行更改为:

imagerot = 255*ones([max(dest) p],'uint8');   %Your image is uint8 in this case

结果:
result