【问题标题】:Decrease Target Contrast without losing image details降低目标对比度而不丢失图像细节
【发布时间】:2019-10-23 19:05:57
【问题描述】:

我有一个原始图像(左侧),我想降低对象(水平形状的东西)对比度以模拟参考图像(右侧)。我尝试了所有平滑方法,但它们都会影响图像对比度(比如背景对比度)。有什么方法可以建立模型然后从原始图像中减去它?

换句话说,我们有什么办法可以给左边的图像添加不透明度来模拟右边的图像?已提供对象蒙版,其大小与原始图像相同。

任何建议将不胜感激。

【问题讨论】:

    标签: matlab model contrast


    【解决方案1】:

    您可以通过乘以输入图像中的蒙版区域来降低对比度:

    I = imread('https://i.stack.imgur.com/QML1p.png'); %I = imread('1.png'); %Read image
    M = imbinarize(imread('https://i.stack.imgur.com/nBqeS.png')); %imbinarize(imread('2.png')); %Read mask, and convert to binary image.
    
    J = I;
    J(M) = J(M)*.5; %Multiply the "horizontal shape thing" by 0.5 - reducing contrast.
    
    figure;imshow(J);
    

    结果:

    上述解决方案是设置“形状事物”的不透明度。


    我试着让它更平滑一点,但结果还是很不一样。

    I = imread('https://i.stack.imgur.com/QML1p.png'); 
    %I = imread('1.png'); %Read image
    M = imbinarize(imread('https://i.stack.imgur.com/nBqeS.png')); 
    %M = imbinarize(imread('2.png')); %Read mask, and convert to binary image.
    
    M = imdilate(M, strel('disk', 20)); %Make mask thicker.
    
    %Crate blurred "shape thing"
    T = zeros(size(I));
    T(M) = double(I(M)); %"shape thing" with some margins, and black surrounding.
    T = T/255; %Change pixels range from [0, 255] to [0, 1].
    T = imgaussfilt(double(T), 5); %Blur (2-D Gaussian filtering).
    
    %Create blurred mask:
    M = imgaussfilt(double(M), 20); %Blur the mask (2-D Gaussian filtering).
    M = max(M, 0.5);
    
    J = T.*M + im2double(I).*(1-M); %Weighed average.
    J = imgaussfilt(J, 1);
    J = im2uint8(J);
    
    figure;imshow(J);
    

    结果:

    试着玩一下...


    再试一次:

    • 通过平均 J 和 0.5 来降低“形状事物”与背景之间的相对对比度
    • 添加高斯噪声(使结果更接近参考)。

    代码:

    I = imread('https://i.stack.imgur.com/QML1p.png'); 
    M = imbinarize(imread('https://i.stack.imgur.com/nBqeS.png')); 
    
    M = imdilate(M, strel('disk', 20)); %Make mask thicker.
    
    %Crate blurred "shape thing"
    T = zeros(size(I));
    T(M) = double(I(M)); %"shape thing" with some margins, and black surrounding.
    T = T/255; %Change pixels range from [0, 255] to [0, 1].
    T = imgaussfilt(double(T), 5); %Blur (2-D Gaussian filtering).
    
    T = T*1.5; %Scale T for changing opaquely
    
    %Create blurred mask:
    M = imgaussfilt(double(M), 20); %Blur the mask (2-D Gaussian filtering).
    M = max(M, 0.5);
    
    J = T.*M + im2double(I).*(1-M); %Weighed average.
    J = imgaussfilt(J, 1);
    
    %Reduce the relative contrast between "shape thing" and background by averaging J and 0.5
    J = (J + 0.5)/2;
    J = min(J, 1);
    
    %Add gaussian noise (so result be closer to reference). 
    J = imnoise(J, 'gaussian', 0, 0.005);
    
    J = im2uint8(J);
    
    figure;imshow(J);
    

    结果:

    【讨论】:

    • 谢谢@Rotem。我尝试使用各向异性扩散过滤器并得到类似的结果。我认为你是对的,我们需要先降低目标对比度,然后再应用平滑。但问题是,一旦您对目标进行平滑处理并重新缩放图像,对比度就会增加,背景像素会变暗。
    • 所以如果我想改变参数来实现更不透明的情况(附上参考图),我可以调整什么参数来实现呢?
    • 在我回答的第一部分,您可以将比例从 0.5 更改为其他值。在第二部分中,您可以按系数(如 0.5)缩放矩阵 T。
    • 我用新的例子编辑了我的帖子:我认为增加背景的层次很重要,所以物体和背景之间的相对对比度会更接近参考图像。 (我还添加了一些噪音)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 2014-05-31
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多