How to add and subtract two color images in matlab?

13 ビュー (過去 30 日間)
Sajina Rose
Sajina Rose 2020 年 1 月 31 日
コメント済み: Sajina Rose 2020 年 2 月 1 日
I-G(I);
where I=original image and G(I)=Gaussian filtered version of I.
  2 件のコメント
Rik
Rik 2020 年 1 月 31 日
Using just the normal symbols will result in an element-wise addition or subtraction. That could cause issues with underflow and overflow if you are using an integer data type, and the result might not be what you mean.
What is your question? What have you tried? How did it fail to match your desired result?
Sajina Rose
Sajina Rose 2020 年 2 月 1 日
I'm writing a code for subtract two images and then apply histogram stretching to resultant image.
Here, my sample code
%%%%%%
z=imsubtract(double(X)-double(Y));
N=imadjust(z,[],0.5);
figure,imshow(N),title('Histogram Stretching');
%%%%%%%
But is shows error like,
"Not enough input arguments.
Error in imsubtract (line 34)
scalarDoubleY = isa(Y,'double') && numel(Y) == 1;
Error in method1 (line 83)
z=imsubtract(double(AGW)-double(B));"

サインインしてコメントする。

採用された回答

Subhadeep Koley
Subhadeep Koley 2020 年 2 月 1 日
Hi, Sajina the function imsubtract expects two real, nonsparse, numeric or logical image. Threfore the below syntax is not right.
z = imsubtract(double(X)-double(Y));
Try the code below.
% Read your image here
X = imread('peppers.png');
figure; imshow(X, []); title('Original Color Image');
% Gaussian Filtering
sigma = 5; % Standard deviation of the kernel
Y = imgaussfilt(X, sigma);
figure; imshow(Y, []); title('Gaussian Filtered Image');
Z = imsubtract(X, Y);
N = imadjust(Z, stretchlim(Z));
figure,imshow(N, []), title('Histogram Stretched Subtracted Image');
gaussSub.png
Hope this helps!
  4 件のコメント
Subhadeep Koley
Subhadeep Koley 2020 年 2 月 1 日
@ Sajina Rose Refer the below code
% Read your image here
X = imread('peppers.png');
figure; imshow(X, []); title('Original Color Image');
% Gaussian Filtering
sigma = 5; % Standard deviation of the kernel
Y = imgaussfilt(X, sigma);
figure; imshow(Y, []); title('Gaussian Filtered Image');
Z = imsubtract(X, Y);
N = imadjust(Z, stretchlim(Z));
figure,imshow(N, []), title('Histogram Stretched Subtracted Image');
U = (imadd(X, N)) / 2;
figure,imshow(U, []); title('Unsharp Masked Image');
Otherwise you can use the MATLAB built-in function imsharpen(), which performs Unsharp Masking.
XSharp = imsharpen(X, 'Radius', 1.5, 'Amount', 2);
figure,imshow(XSharp, []), title('Unsharp Masked Image');
Sajina Rose
Sajina Rose 2020 年 2 月 1 日
Thank you so much.

サインインしてコメントする。

その他の回答 (0 件)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by