My problem is when putting the pictures together my indices have to be an integer so how do I take a third of each picture and put them together?

조회 수: 1 (최근 30일)
Hi, I'm trying to make a red filter by picking a value between 0 and 1 and dividing the remainder to the Green and Blue layers of the picture then stitching together a grayscale, the original, and the red filtered picture next to each other...
function [ outImg] = redFilter( inImg , redVal)
%red filter
[r,c,d] = size(inImg);
%grayscale
gray = 0.2989*inImg(:,:,1)+0.5870*inImg(:,:,2)+0.1140*inImg(:,:,3);
%red filter
GandB = 1 - redVal;
red = redVal*inImg(:,:,1)+(GandB/2)*inImg(:,:,2)+(GandB/2)*inImg(:,:,3);
%final image
gray3 = gray(r,round(c/3),d);
red3 = red(r,c/3,d);
inImg3 = InImg(r,c/3,d);
outImg = [gray3, inImg3, red3];
end
  댓글 수: 2
Stephen23
Stephen23 2017년 3월 5일
@Brady Barkemeyer: this time I formatted your code for you. Next time you can do it yourself: first select the code text, then click the Code {} button above the textbox.
Jan
Jan 2017년 3월 6일
The question is not clear to me. What does "take a third" exactly mean? Do you mean something like gray(r, 1:3:end, d)?

댓글을 달려면 로그인하십시오.

답변 (1개)

Sonam Gupta
Sonam Gupta 2017년 3월 8일
I assume that you are trying to stitch the images together such that for the same image 1/3rd is in grayscale, another 1/3rd is redFiltered and remaining 1/3rd is real image. Few points to pay attention are gray is a two dimensional matrix having same dimension as that of image size. By using the syntax 'gray(r,round(c/3),d)' you are referring to single element of the array. Moreover, the way gray is defined it does not have third dimension.
Given below is the modified version of your code but you still need to check what you want to achieve with gray.
function [ outImg] = redFilter_modified( inImg , redVal)
%red filter
[r,c,d] = size(inImg);
%grayscale
gray = zeros(r, c, d);
gray(:, : , 1) = 0.2989*inImg(:,:,1);
gray(:, :, 2) = 0.5870*inImg(:,:,2);
gray(:, :,3) = 0.1140*inImg(:,:,3);
%red filter
GandB = 1 - redVal;
red = zeros(r, c, d);
red(:, :, 1) = redVal*inImg(:,:,1);
red(:, :,2) = (GandB/2)*inImg(:,:,2);
red(:, :, 3) = (GandB/2)*inImg(:,:,3);
%final image
%creating the image array taking one third from all there matrices
width = round(c/3); % number of rows should be same, only number of columns will be divided by 3
gray3 = gray(:,1:width, :);
red3 = red(:,width+1: round(2*c/3), :);
inImg3 = inImg(:,round((2*c/3)+1 : c), :);
outImg = [gray3,red3, inImg3];
imshow(outImg);
end
Hope this answers your query.

카테고리

Help CenterFile Exchange에서 Introduction to Installation and Licensing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by