图像背景叠加颜色变化为什么会发生?

24日视图(30天)
你好,我只是在一个和我有一些deficulties .....任务Canany一检查是错误的…
注意:任务是修改背景图片显示一个标志。
这样的东西,
我还是新与Matlab请谁能帮我做这个…
我一直是工作的代码。
%的作用被写在作业使用特别像im2double等等。
%开始简单阅读图像,调整徽标图像,并将它转换为im2double, im2bw(分配)的一部分。
%我面临的问题在第三我必须使用条件和for循环来查恩pixals圆舞曲一显示标志
%的背景。
%,请帮我做这个任务……
Bgimg = imread (“Background_Image.jpg”);
Bgimgdouble = im2double (Bgimg);
imshow (Bgimgdouble);
Fgimg = imread (“Forground_Image.png”);
FgimgRs = imresize (Fgimg (576 720));
imshow (Fgimg);
%将白人和黑人转换为黑白。
FgimgRsComp = imcomplement (FgimgRs);
imshow (FgimgRsComp);
Fgimg2bw = im2bw (FgimgRsComp, 0.4);
imshow (Fgimg2bw);
%这里我有一些麻烦
img = 0(大小(Fgimg2bw));
2 = 1:尺寸(Fgimg2bw, 1)
jj = 1:尺寸(Fgimg2bw, 2)
%得到像素值
像素= Fgimg2bw (ii, jj);
%检查像素值和分配新值
如果像素< 0.5
new_pixel = 0;
elseif像素> 3
new_pixel = 0;
其他的
new_pixel =像素;
结束
%保存新的像素值在img的形象
img (ii, jj) = new_pixel;
结束
结束
imshow (img)
%的时候把图片放在彼此的标志形象(VU)蓝色而不是白色。
%我也希望标志是透明的。
图像(Bgimgdouble)
图像
持有
我=图像(img);
即时通讯。AlphaData = max (img, [], 3);
持有
这是由于im .....

答案(2)


为副总经理
为副总经理 2022年3月17日
编辑:为副总经理 2022年4月21日
死后,我知道。我就是喜欢跟鬼。
因为没有源图像提供,这是从来没有一个直接负责的问题。不过,有些事情可以相当清楚。
这是一个基本的图像融合问题。它可能最初包括堆肥方面,但是因为没有α内容从源图像读取,那么我们可以认为是没有实际意义的原始方法。它的形象 混合
Imfuse()是一个基本的形象 比较 工具。它没有实用价值的图像组成 混合。最接近它所能做的就是一个统一的不透明度50%组成混合或绝对的区别。
调查的证据
不知道源图像,很难确定他们到底是怎么混。让我们先从一个假设。假设前景图像是纯白色文本在一个黑色的席子。在这一点上,混合方法应该很明显,但我们试图让一些观察。
内左侧垂直U的边缘,我要出现一个2 px宽条纹,一列采样混合区,其他列抽样未混合的区域。如果我们能再次假设原始BG变化将在这2 px水平距离小,我们可以推导出混合和未混合的区域之间的关系。
一个= imread (“vusample.jpg”);
= im2double ();
颜色= {“r”,‘g’,“b”};
整编= linspace (0, 1100);
c = 1:3
tc = (:,:, c);
(BG idx) =独特(tc (:, 2),“排序”);
R = tc (idx, 1);
%插入到一个统一的基础
射频= interp1 (BG, R,整编,“线性”);
情节(整编、射频、颜色{c});持有
结束
xlim ([0 1])
ylim ([0 1])
广场
包含(“背景”)
ylabel (“结果”)
它已经(或多或少)像应该预期。这些曲线代表子午线的混合函数(结果与背景前景的一个值)。大概都是线性的,输出是剪平。注意曲线不开始在原点。虽然它可能通常难以说出一个给定的2 d函数看起来就像当一个人只能有一个两个独立变量,给定的图像和上下文暗示这是简单——即线性减淡混合(添加)。
如果是这样的话,这个子午线的截距应该告诉我们一些关于混合和/或前景图像。前台是白色和混合使用前景混合重量为0.6,或者前台不白。没有办法知道。如果是混合在一个图像处理程序,如Photoshop,然后前台只是不是白色的。没有传统图像处理套件实现参数化的加法或混合线性减淡。
不是在上面的等高线图可见,但情况FG = 0 = R = BG对角线。换句话说,这个混合函数有一个中立的FG = 0时的反应。如果没有明显的事实很简单,中立的位置响应应该说清楚,黑FG席子不会影响输出。
实现混合
让我们尝试一些相似。这些都是成品和BG图像。因为我没有原始图像,给定的组合将成为新的BG:
首先让我们做这个的基本方法。注意类的变化。虽然不是严格必需的混合,它将为其他混合。我写这样的泛化的过程 任何 混合。
FG = imread (“VUtext.jpg”);% uint8形象
BG = imread (“VU.jpg”);% uint8形象
FG = im2double (FG);%将翻倍
BG = im2double (BG);
R = 0.6 * FG + BG;%的混合:简单的加法成品重量的60%
R = im2uint8 (R);%为了一致性,回到原始类
imshow(右)
在实践中,一套图像处理的便利可以归结为你不需要知道或记住每一个背后的数学混合操作。虽然这个例子是一个简单的混合,最好是避免麻烦和使用为目的而设计的。
IPT或基地唯一的工具MATLAB,类似imadd (), imsubtract (), imabsdiff (), immultiply()和imdivide ()。这些都不是混合工具。这些有用的工具不一致class-agnostic他们的行为。他们不能安全地用于混合mixed-class(甚至同一类)图像而不被包裹在一层class-dependent保姆。
  • immultiply (uint8 (128), uint8 (128))不等于uint8 (64)
  • imadd (uint8(128),双(0.5))不等于uint8 (255)
  • imadd(双(0.5),uint8 (128))将导致一个错误
专用混合工具,您需要使用第三方工具或编写自己的。至少有几个图像混合工具文件交换,是最全面的选项 混合工具 而来 MIMT
FG = imread (“VUtext.jpg”);% uint8形象
BG = imread (“VU.jpg”);% uint8形象
R = imblend (FG, BG, 1“lineardodge”,0.6);% uint8形象
imshow(右)%结果与上面的示例相同
这至少是简洁。类处理都是在内部完成。成品的重量是一个简单的标量参数的混合模式。
如果你使用MIMT imcompose(),您可以调整一切交互,虽然这个简单的东西,它不是必要的。
再次,这是一个最简单的可能的混合操作。任何其他情况下更难以认同这样的确定,和任何其他情况下会更不方便相比,使用专用工具。的简单的例子“柔光”混合(的SVG规范):
相比之前的例子中,这不是更复杂与imblend ():
FG = imread (“VUtext.jpg”);
BG = imread (“VU.jpg”);
R = imblend (FG, BG, 1“softlightsvg”);
imshow(右)
…但想滚自己的每一次吗?
FG = imread (“VUtext.jpg”);
BG = imread (“VU.jpg”);
FG = im2double (FG);
BG = im2double (BG);
m1 = FG < = 0.50;
m2 = BG < = 0.25;
m3 = ~ m1和m2;
m4 = ~ ~ m1和m2;
R = (BG - (1 - 2 * FG)。* BG。* (1-BG)) * m1
+ (BG + (2 * FG-1)。* (4 * BG。* (4 * BG + 1) * (BG-1) + 7 * BG)。* m3
+ (BG + (2 * FG-1)。* (sqrt (BG) - BG))。* m4;
R = im2uint8 (R);
imshow(右)
…没有那么方便。
1评论
为副总经理
为副总经理 2022年3月17日
我怀疑,这是必要的,但什么是错误的与OP的代码:
Bgimg = imread (“VU.jpg”);
Bgimgdouble = im2double (Bgimg);
Fgimg = imread (“VUtext.jpg”);
% FgimgRs = imresize (Fgimg (576 720));
FgimgRs = Fgimg;%我不需要调整我的成品图片
%将白人和黑人转换为黑白。
%的思想你,这破坏了所有的抗锯齿
% FgimgRsComp = imcomplement (FgimgRs);
FgimgRsComp = FgimgRs;%我不需要反FG
imshow (FgimgRsComp);
Fgimg2bw = im2bw (FgimgRsComp, 0.4);
imshow (Fgimg2bw);
%因为Fgimg2bw是逻辑,整个循环并没有
%值是0或1,所以输入输出是相同的
img = 0(大小(Fgimg2bw));
2 = 1:尺寸(Fgimg2bw, 1)
jj = 1:尺寸(Fgimg2bw, 2)
%得到像素值
像素= Fgimg2bw (ii, jj);
%检查像素值和分配新值
如果像素< 0.5
new_pixel = 0;
elseif像素> 3
new_pixel = 0;
其他的
new_pixel =像素;
结束
%保存新的像素值在img的形象
img (ii, jj) = new_pixel;
结束
结束
imshow (img)
%在真彩图像()将呈现一个RGB图像
图像(Bgimgdouble)
图像
持有
%但是图像()将呈现一个单通道图像
使用当前colormap %的假彩色
%的蓝色是第一个元组parula colormap ()
我=图像(img);
% img只有一个通道。max()并没有在这里
即时通讯。AlphaData = max (img, [], 3);
持有
如果colormap不同,文本颜色会不同。
即使FG呈现为白色,它仍然是固体。调整不透明度/α的白色FG不会产生原始描述结果的例子。

登录置评。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!